package pe.gob.osinergmin.interfase_siaf.dac.certificacion.service.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pe.gob.osinergmin.interfase_siaf.dac.bean.CertCabBean;
import pe.gob.osinergmin.interfase_siaf.dac.bean.CertDetBean;
import pe.gob.osinergmin.interfase_siaf.dac.certificacion.dao.CertificacionDao;
import pe.gob.osinergmin.interfase_siaf.dac.certificacion.service.CertificacionService;
import pe.gob.osinergmin.interfase_siaf.dac.certificacion.service.ValidacionCertifService;
import pe.gob.osinergmin.interfase_siaf.dac.domain.interfase.CertCab;
import pe.gob.osinergmin.interfase_siaf.dac.domain.interfase.CertDet;
import pe.gob.osinergmin.interfase_siaf.dac.util.Constantes;
import pe.gob.osinergmin.interfase_siaf.dac.util.FechasUtil;

@Service("certificacionService")
public class CertificacionServiceImpl implements CertificacionService {
	
	private final Log logger = LogFactory.getLog(getClass());
	public static final String CODIGO_VERIFICACION_OK ="1";
	public static final String CODIGO_VERIFICACION_ERROR ="0";
	
	
	@Autowired
	private CertificacionDao certificacionDao;
	
	@Autowired
	private ValidacionCertifService validacionCertifService;
	
	
	@Override
	public String insertDatosCertificacion(Map<String, Object> params)
			throws Exception {
		logger.info("Ingresando a registrar datos de certificacion validando parametros"); 
		String mensaje = CODIGO_VERIFICACION_OK+"/"+"";
		CertCabBean cabBean=null;
	    try {
	    	//Parametros
	    	String ciclo = (String) params.get("ciclo");
			String fase = (String) params.get("fase");
			//Datos
			cabBean = (CertCabBean) params.get("cab");    	
			
			if(StringUtils.isBlank(ciclo)){ 			     
			      mensaje = Constantes.COD_CICLO_PARAMETRO_NULO+"/"+
					        Constantes.CICLO_PARAMETRO_NULO;
			}else if(!Constantes.CICLO_CERTIFICACION.equalsIgnoreCase(ciclo)){ 			    
			      mensaje = Constantes.COD_CICLO_PARAMETRO_VALIDO+"/"+
					        Constantes.CICLO_PARAMETRO_VALIDO;
			}else if(StringUtils.isBlank(fase)){ 				
				  mensaje = Constantes.COD_FASE_PARAMETRO_NULO+"/"+
					        Constantes.FASE_PARAMETRO_NULO;
			}else{
				 if(Constantes.FASE_CERTIFICACION.equalsIgnoreCase(fase)){ 
					 //implementacion de estados de certificacion
					 if(StringUtils.isNoneBlank(cabBean.getEstado())){ 
						if(Constantes.CERTIFICACION_AMPLIACION.equals(cabBean.getEstado())){ 
							  logger.info("Ingresando a ampliacion");
							   mensaje = insertDatosCertificacionAmpl(params);	
						}else if(Constantes.CERTIFICACION_REBAJA.equals(cabBean.getEstado())){
							logger.info("Ingresando a rebaja");
							mensaje = insertDatosCertificacionRebaja(params); 	
						}else if(Constantes.CERTIFICACION_ANULACION.equals(cabBean.getEstado())){
							logger.info("Ingresando a anulacion");
							mensaje = insertDatosCertificacionAnulacion(params); 	
						}else{						 
						 mensaje =  Constantes.COD_ESTADO_OPERACION_INGRESO+"/"+
							        Constantes.ESTADO_OPERACION_INGRESO;
						}						 
					  }else{
						  logger.info("Ingresando a certificacion nuevo");
						  mensaje = insertDatosCertificacionNuevo(params);	 					
					  }						 
				}else if(Constantes.FASE_COMPROMISO_ANUAL.equalsIgnoreCase(fase)){ 
					 //implementacion de estados de compromiso anual
					  if(StringUtils.isNoneBlank(cabBean.getEstado())){ 
						if(Constantes.COMPROMISO_ANUAL_AMPLIACION.equals(cabBean.getEstado())){ 
							  logger.info("Ingresando a ampliacion");
							 mensaje = insertDatosCompromisoAnualAmpl(params); 	
						}else if(Constantes.COMPROMISO_ANUAL_REBAJA.equals(cabBean.getEstado())){
							logger.info("Ingresando a rebaja");
							mensaje = insertDatosCompromisoAnualRebaja(params);	
						}else if(Constantes.COMPROMISO_ANUAL_ANULACION.equals(cabBean.getEstado())){
							logger.info("Ingresando a anulacion");
							mensaje = insertDatosCompromisoAnualnAnulacion(params); 	
						}else{
							 mensaje =  Constantes.COD_ESTADO_OPERACION_INGRESO+"/"+
								        Constantes.ESTADO_OPERACION_INGRESO;
						}						 
					  }else{
						   logger.info("Ingresando a compromiso anual nuevo");
						    mensaje = insertDatosCompromisoAnualNuevo(params);						  
					  }						 
				}else{					 
					 mensaje = Constantes.COD_FASE_PARAMETRO_VALIDO+"/"+
						       Constantes.FASE_PARAMETRO_VALIDO;
				}
		  }    	
		} catch (Exception e) {
			logger.info("Error al grabar datos de Certificacion"+e);			
			mensaje= CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(cabBean!=null){
				cabBean=null;
			}
		}
	    return mensaje;
		
	}
	
	
	/*****INGRESOS DE DATOS CERTIFICACION NUEVO*********************/	
	@SuppressWarnings("unchecked")
	private String  insertDatosCertificacionNuevo(Map<String, Object> params) throws Exception {
		logger.info("Ingresando a grabar datos de Certificacion"); 
		String mensaje = CODIGO_VERIFICACION_OK+"/"+"";
		boolean valorCab = false;
		boolean valorDet =false;		
		CertCab i = null;
		List<CertDet> listaDet =null;
		CertDet det = null;
		List<String> listaIdClasif=null;
		CertCabBean cabBean =null;
		List<CertDetBean> detLista=null;
		try {
			//Datos
			cabBean = (CertCabBean) params.get("cab");   			
			detLista = (List<CertDetBean>) params.get("det");				
			
		   /**GRABANDO EN CERT_CAB**/
			if(!validarNulo(cabBean.getSecuencial())){ 
			     mensaje = Constantes.COD_SECUENCIAL_CERTCAB_NULO+"/"+
			    		   Constantes.SECUENCIAL_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getAno_eje())){ 
				 mensaje = Constantes.COD_ANIO_EJE_CERTCAB_NULO+"/"+
			               Constantes.ANIO_EJE_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getSec_ejec())){ 
				 mensaje = Constantes.COD_SEC_EJEC_CERTCAB_NULO+"/"+
						   Constantes.SEC_EJEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NULO+"/"+
						   Constantes.ES_COMP_CERTCAB_NULO;
			}else if(!Constantes.ES_COMP_ANUAL_NO.equals(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NO_VALIDO+"/"+
						   Constantes.ES_COMP_CERTCAB_NO_VALIDO;
			}else if(!validarNulo(cabBean.getCod_doc())){ 
				 mensaje = Constantes.COD_COD_DOC_CERTCAB_NULO+"/"+
				           Constantes.COD_DOC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getNum_doc())){ 
				mensaje = Constantes.COD_NUM_DOC_CERTCAB_NULO+"/"+
				          Constantes.NUM_DOC_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FEC_DOC_CERTCAB_NULO+"/"+
						  Constantes.FEC_DOC_CERTCAB_NULO;	
		    }else if(!FechasUtil.isFechaValida(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FECDOC_CERTCAB_NO_VALIDO+"/"+
						  Constantes.FECDOC_CERTCAB_NO_VALIDO;
		    }else if(!validarNulo(cabBean.getFte_fin())){ 
				mensaje = Constantes.COD_FTE_FIN_CERTCAB_NULO+"/"+
						  Constantes.FTE_FIN_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getMoneda())){ 
				mensaje = Constantes.COD_MONEDA_CERTCAB_NULO+"/"+
				          Constantes.MONEDA_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NULO+"/"+	
				          Constantes.T_CAMBIO_CERTCAB_NULO;
			}else if(!esDecimal(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_VALIDO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_VALIDO;
			}else if(validarNegativo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_NEGATIVO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_NEGATIVO;
			}else if(!validarNulo(cabBean.getGloza())){ 
				mensaje = Constantes.COD_GLOZA_CERTCAB_NULO+"/"+	
				          Constantes.GLOZA_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_envio())){ 
				mensaje = Constantes.COD_UE_ENVIO_CERTCAB_NULO+"/"+	
				          Constantes.UE_ENVIO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_estado())){ 
				mensaje = Constantes.COD_UE_ESTADO_CERTCAB_NULO+"/"+
				          Constantes.UE_ESTADO_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEstado_reg())){ 
				mensaje = Constantes.COD_ESTADO_REG_CERTCAB_NULO+"/"+
				          Constantes.ESTADO_REG_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getDato_ori())){ 
				mensaje = Constantes.COD_DATO_ORI_CERTCAB_NULO+"/"+	
				          Constantes.DATO_ORI_CERTCAB_NULO;	
			}else if(!verificarTipoFinan(cabBean.getFte_fin(),cabBean.getTipo_finan())){
				mensaje = Constantes.COD_TIPO_FINAN_CERTCAB_NULO+"/"+	
				          Constantes.TIPO_FINAN_CERTCAB_NULO;	
			}else{	
				logger.info("Paso validacion certificacion nuevo"); 
				i=new CertCab();
				i.setSecuencial(cabBean.getSecuencial());
				i.setAnoEje(cabBean.getAno_eje());
				i.setSecEjec(cabBean.getSec_ejec());
				i.setEsComp(cabBean.getEs_comp()); 
				i.setTipoOpe(""); 
				i.setCodDoc(cabBean.getCod_doc());				
				i.setNumDoc(cabBean.getNum_doc());
				//parseando la fechadoc				
				Date fechaDoc = FechasUtil.getFechaStringToDate(cabBean.getFec_doc());				
				i.setFecDoc(fechaDoc);			
				i.setTipoId("");
				i.setRuc("");				
				i.setFteFin(cabBean.getFte_fin());				
				i.setMoneda(cabBean.getMoneda());
				logger.info("setenado valores certificacion nuevo"); 
				if(validarNulo(cabBean.getT_cambio())){ 
					i.settCambio(Double.valueOf(cabBean.getT_cambio())); 	
				}else{
					i.settCambio(null); 		
				}
				i.setGloza(cabBean.getGloza()); 
				i.setEstado("");
				i.setUeEnvio(cabBean.getUe_envio());
				i.setUeEstado(cabBean.getUe_estado());
				i.setIntfCer("");
				i.setIntfSec("");
				i.setIntfCor(""); 
				i.setEstadoReg(cabBean.getEstado_reg());
				logger.info("setenado valores certificacion nuevo 1"); 
				i.setDatoOri(cabBean.getDato_ori()); 
				if(Constantes.FTE_FIN_CERT_CAB_13.equals(cabBean.getFte_fin()) ||
						Constantes.FTE_FIN_CERT_CAB_19.equals(cabBean.getFte_fin())){
					i.setTipoFinan(cabBean.getTipo_finan()); 	
				}else{
					i.setTipoFinan(""); 
				}	
				logger.info("setenado valores certificacion nuevo 2"); 
				valorCab = true;
			}				
			 /**GRABANDO EN INTF_DET**/
			logger.info("Valor del boolean cab: "+valorCab);
			if(valorCab){	
				listaIdClasif = new ArrayList<String>();
				listaDet = new ArrayList<CertDet>();
				for(CertDetBean d: detLista){
					det = new CertDet();					
					if(!validarNulo(d.getSecuencial())){ 
						mensaje = Constantes.COD_SECUENCIAL_CERT_DET_NULO+"/"+
						          Constantes.SECUENCIAL_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getId_clasifi())){ 
						mensaje = Constantes.COD_ID_CLASIFI_CERT_DET_NULO+"/"+
						          Constantes.ID_CLASIFI_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv1())){ 
						mensaje = Constantes.COD_CLASIFNIV1_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV1_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv2())){ 
						mensaje = Constantes.COD_CLASIFNIV2_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV2_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv3())){ 
						mensaje = Constantes.COD_CLASIFNIV3_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV3_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv4())){ 
						mensaje = Constantes.COD_CLASIFNIV4_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV4_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv5())){ 
						mensaje = Constantes.COD_CLASIFNIV5_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV5_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv6())){ 
						mensaje = Constantes.COD_CLASIFNIV6_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV6_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getSec_func())){ 
						mensaje = Constantes.COD_SEC_FUNC_CERT_DET_NULO+"/"+
						          Constantes.SEC_FUNC_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NULO+"/"+
						          Constantes.MONTO_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NO_VALIDO+"/"+
						          Constantes.MONTO_CERT_DET_NO_VALIDO;
						break;
					}else if(validarNegativo(d.getMonto())){ 
					    mensaje = Constantes.COD_MONTO_CERT_DET_NO_NEGATIVO+"/"+
					              Constantes.MONTO_CERT_DET_NO_NEGATIVO;
					    break;
				    }else if(!validarNulo(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NULO+"/"+
						          Constantes.MONTO_MN_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_VALIDO+"/"+	
						          Constantes.MONTO_MN_CERT_DET_NO_VALIDO;	
						break;
					}else if(validarNegativo(d.getMonto_mn())){ 
					    mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_NEGATIVO+"/"+
					              Constantes.MONTO_MN_CERT_DET_NO_NEGATIVO;
					    break;
				    }else if(!verificarMontoMn(i.getMoneda(),d.getMonto(),d.getMonto_mn())){
				    	 mensaje = Constantes.COD_MONTO_MN_MONTO_NO_COINCIDE+"/"+
					              Constantes.MONTO_MN_MONTO_NO_COINCIDE;
					    break;
				    }else{								
						det.setSecuencial(d.getSecuencial()); 
						det.setIdClasifi(d.getId_clasifi());
						det.setClasifniv1(d.getClasifniv1());
						det.setClasifniv2(d.getClasifniv2());
						det.setClasifniv3(d.getClasifniv3());
						det.setClasifniv4(d.getClasifniv4());
						det.setClasifniv5(d.getClasifniv5());
						det.setClasifniv6(d.getClasifniv6()); 
						det.setSecFunc(d.getSec_func()); 						
						if(validarNulo(d.getMonto())){
							det.setMonto(Double.valueOf(d.getMonto())); 	
						}else{
							det.setMonto(null);	
						}
	                    if(validarNulo(d.getMonto_mn())){
	                    	det.setMontoMn(Double.valueOf(d.getMonto_mn()));  	
						}else{
							det.setMontoMn(null); 	
						}						
						valorDet = true;		
					}
					listaIdClasif.add(d.getId_clasifi());
					listaDet.add(det);
				}//fin del for			
			}
			
			/**varificando idclasificar en el detalle**/			
			if(valorDet && listaDet.size()>1){
				logger.info("Ingresando a verificar idClasificador: "); 
				Collections.sort(listaIdClasif);
				String idClasif = "";
				for(int j=0;j<listaIdClasif.size();j++){
					logger.info("verificar idClasificador: "+listaIdClasif.get(j)); 
					if(idClasif.equals(listaIdClasif.get(j))){ 
						valorDet = false;	
						mensaje = Constantes.COD_ID_CLASIFICADOR_CERT_DET_REPETIDO+"/"+
						          Constantes.ID_CLASIFICADOR_CERT_DET_REPETIDO; 
						break;
					}else{
						idClasif = listaIdClasif.get(j);						
					}					
				}
			}		
			if(valorCab && valorDet){
				Map<String, Object> paramts = new HashMap<String, Object>();				
				paramts.put("certCab", i);
				paramts.put("listaDet", listaDet);							
				//validando campos de las interfases
				String mensajeID = validacionCertifService.validarCertificacionNuevo(paramts);
				String[] msnId = mensajeID.split("/");
				if(CODIGO_VERIFICACION_OK.equals(msnId[0])) {
				    certificacionDao.insertarCertificacion(paramts);												
				}else{
					mensaje = mensajeID;					
				}			
			}			
		} catch (Exception e) {
			e.printStackTrace();
			logger.info("Error al grabar datos de certficacion: "+e);		
			mensaje= CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i =null;			
			}
			if(listaDet!=null){				
				listaDet = null;				
			}			
			if(det!=null){			
				det= null;
			}
			if(listaIdClasif!=null){			
				listaIdClasif= null;
			}
			if(cabBean!=null){
				cabBean =null;
			}
			if(detLista!=null){
				detLista=null;
			}
		}
		return mensaje;
	}
	
	/*****INGRESOS DE DATOS CERTIFICACION AMPLIACION*********************/	
	@SuppressWarnings("unchecked")
	private String  insertDatosCertificacionAmpl(Map<String, Object> params) throws Exception {
		logger.info("Ingresando a grabar datos de Certificacion Ampl"); 
		String mensaje = CODIGO_VERIFICACION_OK+"/"+"";
		boolean valorCab = false;
		boolean valorDet =false;		
		CertCab i = null;
		List<CertDet> listaDet =null;
		CertDet det = null;
		List<String> listaIdClasif=null;
		CertCabBean cabBean =null;
		List<CertDetBean> detLista=null;		
		try {
			//Datos
			cabBean = (CertCabBean) params.get("cab");		
			detLista = (List<CertDetBean>) params.get("det");				
			
		   /**GRABANDO EN CERT_CAB**/
			if(!validarNulo(cabBean.getSecuencial())){ 
			     mensaje = Constantes.COD_SECUENCIAL_CERTCAB_NULO+"/"+
			    		   Constantes.SECUENCIAL_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getAno_eje())){ 
				 mensaje = Constantes.COD_ANIO_EJE_CERTCAB_NULO+"/"+
			               Constantes.ANIO_EJE_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getSec_ejec())){ 
				 mensaje = Constantes.COD_SEC_EJEC_CERTCAB_NULO+"/"+
						   Constantes.SEC_EJEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NULO+"/"+
						   Constantes.ES_COMP_CERTCAB_NULO;
			}else if(!Constantes.ES_COMP_ANUAL_NO.equals(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NO_VALIDO+"/"+
						   Constantes.ES_COMP_CERTCAB_NO_VALIDO;
			}else if(!validarNulo(cabBean.getCod_doc())){ 
				 mensaje = Constantes.COD_COD_DOC_CERTCAB_NULO+"/"+
				           Constantes.COD_DOC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getNum_doc())){ 
				mensaje = Constantes.COD_NUM_DOC_CERTCAB_NULO+"/"+
				          Constantes.NUM_DOC_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FEC_DOC_CERTCAB_NULO+"/"+
						  Constantes.FEC_DOC_CERTCAB_NULO;	
		    }else if(!FechasUtil.isFechaValida(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FECDOC_CERTCAB_NO_VALIDO+"/"+
						  Constantes.FECDOC_CERTCAB_NO_VALIDO;
		    }else if(!validarNulo(cabBean.getFte_fin())){ 
				mensaje = Constantes.COD_FTE_FIN_CERTCAB_NULO+"/"+
						  Constantes.FTE_FIN_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getMoneda())){ 
				mensaje = Constantes.COD_MONEDA_CERTCAB_NULO+"/"+
				          Constantes.MONEDA_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NULO+"/"+	
				          Constantes.T_CAMBIO_CERTCAB_NULO;
			}else if(!esDecimal(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_VALIDO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_VALIDO;
			}else if(validarNegativo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_NEGATIVO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_NEGATIVO;
			}else if(Double.valueOf(cabBean.getT_cambio())<=0.0){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_MAYOR_CERO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_MAYOR_CERO;
			}else if(!validarNulo(cabBean.getGloza())){ 
				mensaje = Constantes.COD_GLOZA_CERTCAB_NULO+"/"+	
				          Constantes.GLOZA_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getEstado())){ 
				mensaje = Constantes.COD_ESTADO_CERTCAB_NULO+"/"+	
				          Constantes.ESTADO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_envio())){ 
				mensaje = Constantes.COD_UE_ENVIO_CERTCAB_NULO+"/"+	
				          Constantes.UE_ENVIO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_estado())){ 
				mensaje = Constantes.COD_UE_ESTADO_CERTCAB_NULO+"/"+
				          Constantes.UE_ESTADO_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cer())){ 
				mensaje = Constantes.COD_INTF_CER_CERTCAB_NULO+"/"+	
				          Constantes.INTF_CER_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getIntf_sec())){ 
				mensaje = Constantes.COD_INTF_SEC_CERTCAB_NULO+"/"+
				          Constantes.INTF_SEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cor())){ 
				mensaje = Constantes.COD_INTF_COR_CERTCAB_NULO+"/"+
				          Constantes.INTF_COR_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEstado_reg())){ 
				mensaje = Constantes.COD_ESTADO_REG_CERTCAB_NULO+"/"+
				          Constantes.ESTADO_REG_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getDato_ori())){ 
				mensaje = Constantes.COD_DATO_ORI_CERTCAB_NULO+"/"+	
				          Constantes.DATO_ORI_CERTCAB_NULO;	
			}else if(!verificarTipoFinan(cabBean.getFte_fin(),cabBean.getTipo_finan())){
				mensaje = Constantes.COD_TIPO_FINAN_CERTCAB_NULO+"/"+	
				          Constantes.TIPO_FINAN_CERTCAB_NULO;	
			}else{
				i = new CertCab();
				i.setSecuencial(cabBean.getSecuencial());
				i.setAnoEje(cabBean.getAno_eje());
				i.setSecEjec(cabBean.getSec_ejec());
				i.setEsComp(cabBean.getEs_comp()); 
				i.setTipoOpe(""); 
				i.setCodDoc(cabBean.getCod_doc());				
				i.setNumDoc(cabBean.getNum_doc());
				//parseando la fechadoc				
				Date fechaDoc = FechasUtil.getFechaStringToDate(cabBean.getFec_doc());				
				i.setFecDoc(fechaDoc);			
				i.setTipoId("");
				i.setRuc("");				
				i.setFteFin(cabBean.getFte_fin());				
				i.setMoneda(cabBean.getMoneda());
				if(validarNulo(cabBean.getT_cambio())){ 
					i.settCambio(Double.valueOf(cabBean.getT_cambio())); 	
				}else{
					i.settCambio(null); 		
				}			
				i.setGloza(cabBean.getGloza()); 
				i.setEstado(cabBean.getEstado());
				i.setUeEnvio(cabBean.getUe_envio());
				i.setUeEstado(cabBean.getUe_estado());
				i.setIntfCer(cabBean.getIntf_cer());
				i.setIntfSec(cabBean.getIntf_sec());
				i.setIntfCor(cabBean.getIntf_cor()); 
				i.setEstadoReg(cabBean.getEstado_reg()); 
				i.setDatoOri(cabBean.getDato_ori()); 	
				if(Constantes.FTE_FIN_CERT_CAB_13.equals(cabBean.getFte_fin()) ||
						Constantes.FTE_FIN_CERT_CAB_19.equals(cabBean.getFte_fin())){
					i.setTipoFinan(cabBean.getTipo_finan()); 	
				}else{
					i.setTipoFinan(""); 
				}			
				valorCab = true;
			}				
			 /**GRABANDO EN INTF_DET**/
			
			if(valorCab){	
				listaIdClasif = new ArrayList<String>();
				listaDet = new ArrayList<CertDet>();
				for(CertDetBean d: detLista){
					det = new CertDet();					
					if(!validarNulo(d.getSecuencial())){ 
						mensaje = Constantes.COD_SECUENCIAL_CERT_DET_NULO+"/"+
						          Constantes.SECUENCIAL_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getId_clasifi())){ 
						mensaje = Constantes.COD_ID_CLASIFI_CERT_DET_NULO+"/"+
						          Constantes.ID_CLASIFI_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv1())){ 
						mensaje = Constantes.COD_CLASIFNIV1_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV1_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv2())){ 
						mensaje = Constantes.COD_CLASIFNIV2_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV2_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv3())){ 
						mensaje = Constantes.COD_CLASIFNIV3_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV3_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv4())){ 
						mensaje = Constantes.COD_CLASIFNIV4_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV4_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv5())){ 
						mensaje = Constantes.COD_CLASIFNIV5_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV5_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv6())){ 
						mensaje = Constantes.COD_CLASIFNIV6_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV6_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getSec_func())){ 
						mensaje = Constantes.COD_SEC_FUNC_CERT_DET_NULO+"/"+
						          Constantes.SEC_FUNC_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NULO+"/"+
						          Constantes.MONTO_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NO_VALIDO+"/"+
						          Constantes.MONTO_CERT_DET_NO_VALIDO;
						break;
					}else if(validarNegativo(d.getMonto())){ 
					    mensaje = Constantes.COD_MONTO_CERT_DET_NO_NEGATIVO+"/"+
					              Constantes.MONTO_CERT_DET_NO_NEGATIVO;
					    break;
				    }else if(!validarNulo(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NULO+"/"+
						          Constantes.MONTO_MN_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_VALIDO+"/"+	
						          Constantes.MONTO_MN_CERT_DET_NO_VALIDO;	
						break;
					}else if(validarNegativo(d.getMonto_mn())){ 
					    mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_NEGATIVO+"/"+
					              Constantes.MONTO_MN_CERT_DET_NO_NEGATIVO;
					    break;
				    }else if(!verificarMontoMn(i.getMoneda(),d.getMonto(),d.getMonto_mn())){
				    	 mensaje = Constantes.COD_MONTO_MN_MONTO_NO_COINCIDE+"/"+
					              Constantes.MONTO_MN_MONTO_NO_COINCIDE;
					    break;
				    }else{								
						det.setSecuencial(d.getSecuencial()); 
						det.setIdClasifi(d.getId_clasifi());
						det.setClasifniv1(d.getClasifniv1());
						det.setClasifniv2(d.getClasifniv2());
						det.setClasifniv3(d.getClasifniv3());
						det.setClasifniv4(d.getClasifniv4());
						det.setClasifniv5(d.getClasifniv5());
						det.setClasifniv6(d.getClasifniv6()); 
						det.setSecFunc(d.getSec_func()); 						
						if(validarNulo(d.getMonto())){
							det.setMonto(Double.valueOf(d.getMonto())); 	
						}else{
							det.setMonto(null);	
						}
	                    if(validarNulo(d.getMonto_mn())){
	                    	det.setMontoMn(Double.valueOf(d.getMonto_mn()));  	
						}else{
							det.setMontoMn(null); 	
						}						
						valorDet = true;		
					}
					listaIdClasif.add(d.getId_clasifi());
					listaDet.add(det);
				}//fin del for			
			}
			
			/**varificando idclasificar en el detalle**/			
			if(valorDet && listaDet.size()>1){
				logger.info("Ingresando a verificar idClasificador: "); 
				Collections.sort(listaIdClasif);
				String idClasif = "";
				for(int j=0;j<listaIdClasif.size();j++){
					logger.info("verificar idClasificador: "+listaIdClasif.get(j)); 
					if(idClasif.equals(listaIdClasif.get(j))){ 
						valorDet = false;	
						mensaje = Constantes.COD_ID_CLASIFICADOR_CERT_DET_REPETIDO+"/"+
						          Constantes.ID_CLASIFICADOR_CERT_DET_REPETIDO; 
						break;
					}else{
						idClasif = listaIdClasif.get(j);						
					}					
				}
			}		
			if(valorCab && valorDet){
				Map<String, Object> paramts = new HashMap<String, Object>();				
				paramts.put("certCab", i);
				paramts.put("listaDet", listaDet);							
				//validando campos de las interfases
				String mensajeID = validacionCertifService.validarCertificacionAmpl(paramts);
				String[] msnId = mensajeID.split("/");
				if(CODIGO_VERIFICACION_OK.equals(msnId[0])) {
					 certificacionDao.insertarCertificacion(paramts);								
				}else{
					mensaje = mensajeID;					
				}			
			}			
		} catch (Exception e) {
			logger.info("Error al grabar datos de certficacion ampliacion: "+e);		
			mensaje= CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i =null;			
			}
			if(listaDet!=null){				
				listaDet = null;				
			}			
			if(det!=null){			
				det= null;
			}
			if(listaIdClasif!=null){			
				listaIdClasif= null;
			}
			if(cabBean!=null){
				cabBean =null;
			}
			if(detLista!=null){
				detLista=null;
			}
		}
		return mensaje;
	}
	
	
	/*****INGRESOS DE DATOS CERTIFICACION REBAJA*********************/	
	@SuppressWarnings("unchecked")
	private String  insertDatosCertificacionRebaja(Map<String, Object> params) throws Exception {
		logger.info("Ingresando a grabar datos de Certificacion Rebaja"); 
		String mensaje = CODIGO_VERIFICACION_OK+"/"+"";
		boolean valorCab = false;
		boolean valorDet =false;		
		CertCab i = null;
		List<CertDet> listaDet =null;
		CertDet det = null;
		List<String> listaIdClasif=null;
		CertCabBean cabBean =null;
		List<CertDetBean> detLista=null;
		double sumaMonto = 0.0;
		double sumaMontoMn = 0.0;		
		try {
			//Datos
			cabBean = (CertCabBean) params.get("cab");  		
			detLista = (List<CertDetBean>) params.get("det");				
			
		   /**GRABANDO EN CERT_CAB**/
			if(!validarNulo(cabBean.getSecuencial())){ 
			     mensaje = Constantes.COD_SECUENCIAL_CERTCAB_NULO+"/"+
			    		   Constantes.SECUENCIAL_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getAno_eje())){ 
				 mensaje = Constantes.COD_ANIO_EJE_CERTCAB_NULO+"/"+
			               Constantes.ANIO_EJE_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getSec_ejec())){ 
				 mensaje = Constantes.COD_SEC_EJEC_CERTCAB_NULO+"/"+
						   Constantes.SEC_EJEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NULO+"/"+
						   Constantes.ES_COMP_CERTCAB_NULO;
			}else if(!Constantes.ES_COMP_ANUAL_NO.equals(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NO_VALIDO+"/"+
						   Constantes.ES_COMP_CERTCAB_NO_VALIDO;
			}else if(!validarNulo(cabBean.getCod_doc())){ 
				 mensaje = Constantes.COD_COD_DOC_CERTCAB_NULO+"/"+
				           Constantes.COD_DOC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getNum_doc())){ 
				mensaje = Constantes.COD_NUM_DOC_CERTCAB_NULO+"/"+
				          Constantes.NUM_DOC_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FEC_DOC_CERTCAB_NULO+"/"+
						  Constantes.FEC_DOC_CERTCAB_NULO;	
		    }else if(!FechasUtil.isFechaValida(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FECDOC_CERTCAB_NO_VALIDO+"/"+
						  Constantes.FECDOC_CERTCAB_NO_VALIDO;
		    }else if(!validarNulo(cabBean.getFte_fin())){ 
				mensaje = Constantes.COD_FTE_FIN_CERTCAB_NULO+"/"+
						  Constantes.FTE_FIN_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getMoneda())){ 
				mensaje = Constantes.COD_MONEDA_CERTCAB_NULO+"/"+
				          Constantes.MONEDA_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NULO+"/"+	
				          Constantes.T_CAMBIO_CERTCAB_NULO;
			}else if(!esDecimal(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_VALIDO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_VALIDO;
			}else if(validarNegativo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_NEGATIVO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_NEGATIVO;
			}else if(Double.valueOf(cabBean.getT_cambio())<=0.0){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_MAYOR_CERO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_MAYOR_CERO;
			}else if(!validarNulo(cabBean.getGloza())){ 
				mensaje = Constantes.COD_GLOZA_CERTCAB_NULO+"/"+	
				          Constantes.GLOZA_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getEstado())){ 
				mensaje = Constantes.COD_ESTADO_CERTCAB_NULO+"/"+	
				          Constantes.ESTADO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_envio())){ 
				mensaje = Constantes.COD_UE_ENVIO_CERTCAB_NULO+"/"+	
				          Constantes.UE_ENVIO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_estado())){ 
				mensaje = Constantes.COD_UE_ESTADO_CERTCAB_NULO+"/"+
				          Constantes.UE_ESTADO_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cer())){ 
				mensaje = Constantes.COD_INTF_CER_CERTCAB_NULO+"/"+	
				          Constantes.INTF_CER_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getIntf_sec())){ 
				mensaje = Constantes.COD_INTF_SEC_CERTCAB_NULO+"/"+
				          Constantes.INTF_SEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cor())){ 
				mensaje = Constantes.COD_INTF_COR_CERTCAB_NULO+"/"+
				          Constantes.INTF_COR_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEstado_reg())){ 
				mensaje = Constantes.COD_ESTADO_REG_CERTCAB_NULO+"/"+
				          Constantes.ESTADO_REG_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getDato_ori())){ 
				mensaje = Constantes.COD_DATO_ORI_CERTCAB_NULO+"/"+	
				          Constantes.DATO_ORI_CERTCAB_NULO;	
			}else if(!verificarTipoFinan(cabBean.getFte_fin(),cabBean.getTipo_finan())){
				mensaje = Constantes.COD_TIPO_FINAN_CERTCAB_NULO+"/"+	
				          Constantes.TIPO_FINAN_CERTCAB_NULO;	
			}else{
				i= new CertCab();
				i.setSecuencial(cabBean.getSecuencial());
				i.setAnoEje(cabBean.getAno_eje());
				i.setSecEjec(cabBean.getSec_ejec());
				i.setEsComp(cabBean.getEs_comp()); 
				i.setTipoOpe(""); 
				i.setCodDoc(cabBean.getCod_doc());				
				i.setNumDoc(cabBean.getNum_doc());
				//parseando la fechadoc				
				Date fechaDoc = FechasUtil.getFechaStringToDate(cabBean.getFec_doc());				
				i.setFecDoc(fechaDoc);			
				i.setTipoId("");
				i.setRuc("");				
				i.setFteFin(cabBean.getFte_fin());				
				i.setMoneda(cabBean.getMoneda());
				if(validarNulo(cabBean.getT_cambio())){ 
					i.settCambio(Double.valueOf(cabBean.getT_cambio())); 	
				}else{
					i.settCambio(null); 		
				}			
				i.setGloza(cabBean.getGloza()); 
				i.setEstado(cabBean.getEstado());
				i.setUeEnvio(cabBean.getUe_envio());
				i.setUeEstado(cabBean.getUe_estado());
				i.setIntfCer(cabBean.getIntf_cer());
				i.setIntfSec(cabBean.getIntf_sec());
				i.setIntfCor(cabBean.getIntf_cor()); 
				i.setEstadoReg(cabBean.getEstado_reg()); 
				i.setDatoOri(cabBean.getDato_ori()); 	
				if(Constantes.FTE_FIN_CERT_CAB_13.equals(cabBean.getFte_fin()) ||
						Constantes.FTE_FIN_CERT_CAB_19.equals(cabBean.getFte_fin())){
					i.setTipoFinan(cabBean.getTipo_finan()); 	
				}else{
					i.setTipoFinan(""); 
				}			
				valorCab = true;
			}		
			 /**GRABANDO EN INTF_DET**/
			
			if(valorCab){	
				listaIdClasif = new ArrayList<String>();
				listaDet = new ArrayList<CertDet>();
				for(CertDetBean d: detLista){
					det = new CertDet();					
					if(!validarNulo(d.getSecuencial())){ 
						mensaje = Constantes.COD_SECUENCIAL_CERT_DET_NULO+"/"+
						          Constantes.SECUENCIAL_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getId_clasifi())){ 
						mensaje = Constantes.COD_ID_CLASIFI_CERT_DET_NULO+"/"+
						          Constantes.ID_CLASIFI_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv1())){ 
						mensaje = Constantes.COD_CLASIFNIV1_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV1_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv2())){ 
						mensaje = Constantes.COD_CLASIFNIV2_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV2_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv3())){ 
						mensaje = Constantes.COD_CLASIFNIV3_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV3_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv4())){ 
						mensaje = Constantes.COD_CLASIFNIV4_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV4_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv5())){ 
						mensaje = Constantes.COD_CLASIFNIV5_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV5_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv6())){ 
						mensaje = Constantes.COD_CLASIFNIV6_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV6_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getSec_func())){ 
						mensaje = Constantes.COD_SEC_FUNC_CERT_DET_NULO+"/"+
						          Constantes.SEC_FUNC_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NULO+"/"+
						          Constantes.MONTO_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NO_VALIDO+"/"+
						          Constantes.MONTO_CERT_DET_NO_VALIDO;
						break;
					}else if(!validarNegativo(d.getMonto())){ 
					    mensaje = Constantes.COD_MONTO_CERT_DET_NO_POSITIVO+"/"+
					              Constantes.MONTO_CERT_DET_NO_POSITIVO;
					    break;
				    }else if(!validarNulo(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NULO+"/"+
						          Constantes.MONTO_MN_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_VALIDO+"/"+	
						          Constantes.MONTO_MN_CERT_DET_NO_VALIDO;	
						break;
					}else if(!validarNegativo(d.getMonto_mn())){ 
					    mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_POSITIVO+"/"+
					              Constantes.MONTO_MN_CERT_DET_NO_POSITIVO;
					    break;
				    }else if(!verificarMontoMn(i.getMoneda(),d.getMonto(),d.getMonto_mn())){
				    	 mensaje = Constantes.COD_MONTO_MN_MONTO_NO_COINCIDE+"/"+
					              Constantes.MONTO_MN_MONTO_NO_COINCIDE;
					    break;
				    }else{								
						det.setSecuencial(d.getSecuencial()); 
						det.setIdClasifi(d.getId_clasifi());
						det.setClasifniv1(d.getClasifniv1());
						det.setClasifniv2(d.getClasifniv2());
						det.setClasifniv3(d.getClasifniv3());
						det.setClasifniv4(d.getClasifniv4());
						det.setClasifniv5(d.getClasifniv5());
						det.setClasifniv6(d.getClasifniv6()); 
						det.setSecFunc(d.getSec_func()); 						
						if(validarNulo(d.getMonto())){
							det.setMonto(Double.valueOf(d.getMonto())); 	
						}else{
							det.setMonto(null);	
						}
	                    if(validarNulo(d.getMonto_mn())){
	                    	det.setMontoMn(Double.valueOf(d.getMonto_mn()));  	
						}else{
							det.setMontoMn(null); 	
						}
	                    sumaMonto = sumaMonto +det.getMonto();
	                    sumaMontoMn = sumaMontoMn +det.getMontoMn();
						valorDet = true;		
					}
					listaIdClasif.add(d.getId_clasifi());
					listaDet.add(det);
				}//fin del for			
			}
			
			/**varificando idclasificar en el detalle**/			
			if(valorDet && listaDet.size()>1){
				logger.info("Ingresando a verificar idClasificador: "); 
				Collections.sort(listaIdClasif);
				String idClasif = "";
				for(int j=0;j<listaIdClasif.size();j++){
					logger.info("verificar idClasificador: "+listaIdClasif.get(j)); 
					if(idClasif.equals(listaIdClasif.get(j))){ 
						valorDet = false;	
						mensaje = Constantes.COD_ID_CLASIFICADOR_CERT_DET_REPETIDO+"/"+
						          Constantes.ID_CLASIFICADOR_CERT_DET_REPETIDO; 
						break;
					}else{
						idClasif = listaIdClasif.get(j);						
					}					
				}
			}		
			if(valorCab && valorDet){
				Map<String, Object> paramts = new HashMap<String, Object>();				
				paramts.put("certCab", i);
				paramts.put("listaDet", listaDet);	
				paramts.put("montoTotal", sumaMonto);
				paramts.put("montoMnTotal", sumaMontoMn);
				//validando campos de las interfases
				String mensajeID = validacionCertifService.validarCertificacionRebaja(paramts);
				String[] msnId = mensajeID.split("/");
				if(CODIGO_VERIFICACION_OK.equals(msnId[0])) {
					certificacionDao.insertarCertificacion(paramts);											
				}else{
					mensaje = mensajeID;					
				}			
			}			
		} catch (Exception e) {
			logger.info("Error al grabar datos de certficacion rebaja: "+e);		
			mensaje= CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i =null;			
			}
			if(listaDet!=null){				
				listaDet = null;				
			}			
			if(det!=null){			
				det= null;
			}
			if(listaIdClasif!=null){			
				listaIdClasif= null;
			}
			if(cabBean!=null){
				cabBean =null;
			}
			if(detLista!=null){
				detLista=null;
			}
		}
		return mensaje;
	}
	
	/*****INGRESOS DE DATOS CERTIFICACION ANULACION*********************/	
	@SuppressWarnings("unchecked")
	private String  insertDatosCertificacionAnulacion(Map<String, Object> params) throws Exception {
		logger.info("Ingresando a grabar datos de Certificacion Anulacion"); 
		String mensaje = CODIGO_VERIFICACION_OK+"/"+"";
		boolean valorCab = false;
		boolean valorDet =false;		
		CertCab i = null;
		List<CertDet> listaDet =null;
		CertDet det = null;
		List<String> listaIdClasif=null;
		CertCabBean cabBean =null;
		List<CertDetBean> detLista=null;
		double sumaMonto = 0.0;
		double sumaMontoMn = 0.0;		
		try {
			//Datos
			cabBean = (CertCabBean) params.get("cab");			
			detLista = (List<CertDetBean>) params.get("det");				
			
		   /**GRABANDO EN CERT_CAB**/
			if(!validarNulo(cabBean.getSecuencial())){ 
			     mensaje = Constantes.COD_SECUENCIAL_CERTCAB_NULO+"/"+
			    		   Constantes.SECUENCIAL_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getAno_eje())){ 
				 mensaje = Constantes.COD_ANIO_EJE_CERTCAB_NULO+"/"+
			               Constantes.ANIO_EJE_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getSec_ejec())){ 
				 mensaje = Constantes.COD_SEC_EJEC_CERTCAB_NULO+"/"+
						   Constantes.SEC_EJEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NULO+"/"+
						   Constantes.ES_COMP_CERTCAB_NULO;
			}else if(!Constantes.ES_COMP_ANUAL_NO.equals(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NO_VALIDO+"/"+
						   Constantes.ES_COMP_CERTCAB_NO_VALIDO;
			}else if(!validarNulo(cabBean.getCod_doc())){ 
				 mensaje = Constantes.COD_COD_DOC_CERTCAB_NULO+"/"+
				           Constantes.COD_DOC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getNum_doc())){ 
				mensaje = Constantes.COD_NUM_DOC_CERTCAB_NULO+"/"+
				          Constantes.NUM_DOC_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FEC_DOC_CERTCAB_NULO+"/"+
						  Constantes.FEC_DOC_CERTCAB_NULO;	
		    }else if(!FechasUtil.isFechaValida(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FECDOC_CERTCAB_NO_VALIDO+"/"+
						  Constantes.FECDOC_CERTCAB_NO_VALIDO;
		    }else if(!validarNulo(cabBean.getFte_fin())){ 
				mensaje = Constantes.COD_FTE_FIN_CERTCAB_NULO+"/"+
						  Constantes.FTE_FIN_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getMoneda())){ 
				mensaje = Constantes.COD_MONEDA_CERTCAB_NULO+"/"+
				          Constantes.MONEDA_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NULO+"/"+	
				          Constantes.T_CAMBIO_CERTCAB_NULO;
			}else if(!esDecimal(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_VALIDO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_VALIDO;
			}else if(validarNegativo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_NEGATIVO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_NEGATIVO;
			}else if(Double.valueOf(cabBean.getT_cambio())<=0.0){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_MAYOR_CERO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_MAYOR_CERO;
			}else if(!validarNulo(cabBean.getGloza())){ 
				mensaje = Constantes.COD_GLOZA_CERTCAB_NULO+"/"+	
				          Constantes.GLOZA_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getEstado())){ 
				mensaje = Constantes.COD_ESTADO_CERTCAB_NULO+"/"+	
				          Constantes.ESTADO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_envio())){ 
				mensaje = Constantes.COD_UE_ENVIO_CERTCAB_NULO+"/"+	
				          Constantes.UE_ENVIO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_estado())){ 
				mensaje = Constantes.COD_UE_ESTADO_CERTCAB_NULO+"/"+
				          Constantes.UE_ESTADO_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cer())){ 
				mensaje = Constantes.COD_INTF_CER_CERTCAB_NULO+"/"+	
				          Constantes.INTF_CER_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getIntf_sec())){ 
				mensaje = Constantes.COD_INTF_SEC_CERTCAB_NULO+"/"+
				          Constantes.INTF_SEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cor())){ 
				mensaje = Constantes.COD_INTF_COR_CERTCAB_NULO+"/"+
				          Constantes.INTF_COR_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEstado_reg())){ 
				mensaje = Constantes.COD_ESTADO_REG_CERTCAB_NULO+"/"+
				          Constantes.ESTADO_REG_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getDato_ori())){ 
				mensaje = Constantes.COD_DATO_ORI_CERTCAB_NULO+"/"+	
				          Constantes.DATO_ORI_CERTCAB_NULO;	
			}else if(!verificarTipoFinan(cabBean.getFte_fin(),cabBean.getTipo_finan())){
				mensaje = Constantes.COD_TIPO_FINAN_CERTCAB_NULO+"/"+	
				          Constantes.TIPO_FINAN_CERTCAB_NULO;	
			}else{	
				i= new CertCab();
				i.setSecuencial(cabBean.getSecuencial());
				i.setAnoEje(cabBean.getAno_eje());
				i.setSecEjec(cabBean.getSec_ejec());
				i.setEsComp(cabBean.getEs_comp()); 
				i.setTipoOpe(""); 
				i.setCodDoc(cabBean.getCod_doc());				
				i.setNumDoc(cabBean.getNum_doc());
				//parseando la fechadoc				
				Date fechaDoc = FechasUtil.getFechaStringToDate(cabBean.getFec_doc());				
				i.setFecDoc(fechaDoc);			
				i.setTipoId("");
				i.setRuc("");				
				i.setFteFin(cabBean.getFte_fin());				
				i.setMoneda(cabBean.getMoneda());
				if(validarNulo(cabBean.getT_cambio())){ 
					i.settCambio(Double.valueOf(cabBean.getT_cambio())); 	
				}else{
					i.settCambio(null); 		
				}			
				i.setGloza(cabBean.getGloza()); 
				i.setEstado(cabBean.getEstado());
				i.setUeEnvio(cabBean.getUe_envio());
				i.setUeEstado(cabBean.getUe_estado());
				i.setIntfCer(cabBean.getIntf_cer());
				i.setIntfSec(cabBean.getIntf_sec());
				i.setIntfCor(cabBean.getIntf_cor()); 
				i.setEstadoReg(cabBean.getEstado_reg()); 
				i.setDatoOri(cabBean.getDato_ori()); 	
				if(Constantes.FTE_FIN_CERT_CAB_13.equals(cabBean.getFte_fin()) ||
						Constantes.FTE_FIN_CERT_CAB_19.equals(cabBean.getFte_fin())){
					i.setTipoFinan(cabBean.getTipo_finan()); 	
				}else{
					i.setTipoFinan(""); 
				}			
				valorCab = true;
			 }			
			 /**GRABANDO EN INTF_DET**/
			
			if(valorCab){	
				listaIdClasif = new ArrayList<String>();
				listaDet = new ArrayList<CertDet>();
				for(CertDetBean d: detLista){
					det = new CertDet();					
					if(!validarNulo(d.getSecuencial())){ 
						mensaje = Constantes.COD_SECUENCIAL_CERT_DET_NULO+"/"+
						          Constantes.SECUENCIAL_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getId_clasifi())){ 
						mensaje = Constantes.COD_ID_CLASIFI_CERT_DET_NULO+"/"+
						          Constantes.ID_CLASIFI_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv1())){ 
						mensaje = Constantes.COD_CLASIFNIV1_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV1_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv2())){ 
						mensaje = Constantes.COD_CLASIFNIV2_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV2_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv3())){ 
						mensaje = Constantes.COD_CLASIFNIV3_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV3_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv4())){ 
						mensaje = Constantes.COD_CLASIFNIV4_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV4_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv5())){ 
						mensaje = Constantes.COD_CLASIFNIV5_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV5_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv6())){ 
						mensaje = Constantes.COD_CLASIFNIV6_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV6_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getSec_func())){ 
						mensaje = Constantes.COD_SEC_FUNC_CERT_DET_NULO+"/"+
						          Constantes.SEC_FUNC_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NULO+"/"+
						          Constantes.MONTO_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NO_VALIDO+"/"+
						          Constantes.MONTO_CERT_DET_NO_VALIDO;
						break;
					}else if(!validarNegativo(d.getMonto())){ 
					    mensaje = Constantes.COD_MONTO_CERT_DET_NO_POSITIVO+"/"+
					              Constantes.MONTO_CERT_DET_NO_POSITIVO;
					    break;
				    }else if(!validarNulo(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NULO+"/"+
						          Constantes.MONTO_MN_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_VALIDO+"/"+	
						          Constantes.MONTO_MN_CERT_DET_NO_VALIDO;	
						break;
					}else if(!validarNegativo(d.getMonto_mn())){ 
					    mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_POSITIVO+"/"+
					              Constantes.MONTO_MN_CERT_DET_NO_POSITIVO;
					    break;
				    }else if(!verificarMontoMn(i.getMoneda(),d.getMonto(),d.getMonto_mn())){
				    	 mensaje = Constantes.COD_MONTO_MN_MONTO_NO_COINCIDE+"/"+
					              Constantes.MONTO_MN_MONTO_NO_COINCIDE;
					    break;
				    }else{								
						det.setSecuencial(d.getSecuencial()); 
						det.setIdClasifi(d.getId_clasifi());
						det.setClasifniv1(d.getClasifniv1());
						det.setClasifniv2(d.getClasifniv2());
						det.setClasifniv3(d.getClasifniv3());
						det.setClasifniv4(d.getClasifniv4());
						det.setClasifniv5(d.getClasifniv5());
						det.setClasifniv6(d.getClasifniv6()); 
						det.setSecFunc(d.getSec_func()); 						
						if(validarNulo(d.getMonto())){
							det.setMonto(Double.valueOf(d.getMonto())); 	
						}else{
							det.setMonto(null);	
						}
	                    if(validarNulo(d.getMonto_mn())){
	                    	det.setMontoMn(Double.valueOf(d.getMonto_mn()));  	
						}else{
							det.setMontoMn(null); 	
						}
	                    sumaMonto = sumaMonto +det.getMonto();
	                    sumaMontoMn = sumaMontoMn +det.getMontoMn();
						valorDet = true;		
					}
					listaIdClasif.add(d.getId_clasifi());
					listaDet.add(det);
				}//fin del for			
			}
			
			/**varificando idclasificar en el detalle**/			
			if(valorDet && listaDet.size()>1){
				logger.info("Ingresando a verificar idClasificador: "); 
				Collections.sort(listaIdClasif);
				String idClasif = "";
				for(int j=0;j<listaIdClasif.size();j++){
					logger.info("verificar idClasificador: "+listaIdClasif.get(j)); 
					if(idClasif.equals(listaIdClasif.get(j))){ 
						valorDet = false;	
						mensaje = Constantes.COD_ID_CLASIFICADOR_CERT_DET_REPETIDO+"/"+
						          Constantes.ID_CLASIFICADOR_CERT_DET_REPETIDO; 
						break;
					}else{
						idClasif = listaIdClasif.get(j);						
					}					
				}
			}		
			if(valorCab && valorDet){
				Map<String, Object> paramts = new HashMap<String, Object>();				
				paramts.put("certCab", i);
				paramts.put("listaDet", listaDet);	
				paramts.put("montoTotal", sumaMonto);
				paramts.put("montoMnTotal", sumaMontoMn);
				//validando campos de las interfases
				String mensajeID = validacionCertifService.validarCertificacionAnulacion(paramts);
				String[] msnId = mensajeID.split("/");
				if(CODIGO_VERIFICACION_OK.equals(msnId[0])) {
					certificacionDao.insertarCertificacion(paramts);											
				}else{
					mensaje = mensajeID;					
				}			
			}			
		} catch (Exception e) {
			logger.info("Error al grabar datos de certficacion anulacion: "+e);		
			mensaje= CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i =null;			
			}
			if(listaDet!=null){				
				listaDet = null;				
			}			
			if(det!=null){			
				det= null;
			}
			if(listaIdClasif!=null){			
				listaIdClasif= null;
			}
			if(cabBean!=null){
				cabBean =null;
			}
			if(detLista!=null){
				detLista=null;
			}
		}
		return mensaje;
	}
	
	
	/*****INGRESOS DE DATOS COMPROMISO ANUAL NUEVO*********************/	
	@SuppressWarnings("unchecked")
	private String  insertDatosCompromisoAnualNuevo(Map<String, Object> params) throws Exception {
		logger.info("Ingresando a grabar datos de Compromiso anual"); 
		String mensaje = CODIGO_VERIFICACION_OK+"/"+"";
		boolean valorCab = false;
		boolean valorDet =false;		
		CertCab i = null;
		List<CertDet> listaDet =null;
		CertDet det = null;
		List<String> listaIdClasif=null;
		CertCabBean cabBean =null;
		List<CertDetBean> detLista=null;
		double sumaMontoMn = 0.0;		
		try {
			//Datos
			cabBean = (CertCabBean) params.get("cab"); 		
			detLista = (List<CertDetBean>) params.get("det");				
			
		   /**GRABANDO EN CERT_CAB**/
			if(!validarNulo(cabBean.getSecuencial())){ 
			     mensaje = Constantes.COD_SECUENCIAL_CERTCAB_NULO+"/"+
			    		   Constantes.SECUENCIAL_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getAno_eje())){ 
				 mensaje = Constantes.COD_ANIO_EJE_CERTCAB_NULO+"/"+
			               Constantes.ANIO_EJE_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getSec_ejec())){ 
				 mensaje = Constantes.COD_SEC_EJEC_CERTCAB_NULO+"/"+
						   Constantes.SEC_EJEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NULO+"/"+
						   Constantes.ES_COMP_CERTCAB_NULO;
			}else if(!Constantes.ES_COMP_ANUAL_SI.equals(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NO_VALIDO+"/"+
						   Constantes.ES_COMP_CERTCAB_NO_VALIDO;
			}else if(!validarNulo(cabBean.getTipo_ope())){ 
				 mensaje = Constantes.COD_TIPO_OPE_CERTCAB_NULO+"/"+
						   Constantes.TIPO_OPE_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getCod_doc())){ 
				 mensaje = Constantes.COD_COD_DOC_CERTCAB_NULO+"/"+
				           Constantes.COD_DOC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getNum_doc())){ 
				mensaje = Constantes.COD_NUM_DOC_CERTCAB_NULO+"/"+
				          Constantes.NUM_DOC_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FEC_DOC_CERTCAB_NULO+"/"+
						  Constantes.FEC_DOC_CERTCAB_NULO;	
		    }else if(!FechasUtil.isFechaValida(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FECDOC_CERTCAB_NO_VALIDO+"/"+
						  Constantes.FECDOC_CERTCAB_NO_VALIDO;
		    }else if(!validarNulo(cabBean.getTipo_id())){ 
				mensaje = Constantes.COD_TIPO_ID_CERTCAB_NULO+"/"+
				          Constantes.TIPO_ID_CERTCAB_NULO;
		    }else if(!validarNulo(cabBean.getRuc())){ 
				mensaje = Constantes.COD_RUC_CERTCAB_NULO+"/"+
						  Constantes.RUC_CERTCAB_NULO;
		    }else if((cabBean.getRuc().length()!=11)){ 
				mensaje = Constantes.COD_RUC_CERTCAB_NO_VALIDO+"/"+	
				          Constantes.RUC_CERTCAB_NO_VALIDO;
		    }else if(!validarNulo(cabBean.getFte_fin())){ 
				mensaje = Constantes.COD_FTE_FIN_CERTCAB_NULO+"/"+
						  Constantes.FTE_FIN_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getMoneda())){ 
				mensaje = Constantes.COD_MONEDA_CERTCAB_NULO+"/"+
				          Constantes.MONEDA_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NULO+"/"+	
				          Constantes.T_CAMBIO_CERTCAB_NULO;
			}else if(!esDecimal(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_VALIDO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_VALIDO;
			}else if(validarNegativo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_NEGATIVO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_NEGATIVO;
			}else if(!validarNulo(cabBean.getGloza())){ 
				mensaje = Constantes.COD_GLOZA_CERTCAB_NULO+"/"+	
				          Constantes.GLOZA_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_envio())){ 
				mensaje = Constantes.COD_UE_ENVIO_CERTCAB_NULO+"/"+	
				          Constantes.UE_ENVIO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_estado())){ 
				mensaje = Constantes.COD_UE_ESTADO_CERTCAB_NULO+"/"+
				          Constantes.UE_ESTADO_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cer())){ 
				mensaje = Constantes.COD_INTF_CER_CERTCAB_NULO+"/"+
				          Constantes.INTF_CER_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_sec())){ 
				mensaje = Constantes.COD_INTF_SEC_CERTCAB_NULO+"/"+
				          Constantes.INTF_SEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cor())){ 
				mensaje = Constantes.COD_INTF_COR_CERTCAB_NULO+"/"+
						  Constantes.INTF_COR_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getEstado_reg())){ 
				mensaje = Constantes.COD_ESTADO_REG_CERTCAB_NULO+"/"+
				          Constantes.ESTADO_REG_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getDato_ori())){ 
				mensaje = Constantes.COD_DATO_ORI_CERTCAB_NULO+"/"+	
				          Constantes.DATO_ORI_CERTCAB_NULO;	
			}else if(!verificarTipoFinan(cabBean.getFte_fin(),cabBean.getTipo_finan())){
				mensaje = Constantes.COD_TIPO_FINAN_CERTCAB_NULO+"/"+	
				          Constantes.TIPO_FINAN_CERTCAB_NULO;	
			}else{	
				i = new CertCab();
				i.setSecuencial(cabBean.getSecuencial());
				i.setAnoEje(cabBean.getAno_eje());
				i.setSecEjec(cabBean.getSec_ejec());
				i.setEsComp(cabBean.getEs_comp()); 
				i.setTipoOpe(cabBean.getTipo_ope()); 
				i.setCodDoc(cabBean.getCod_doc());				
				i.setNumDoc(cabBean.getNum_doc());
				//parseando la fechadoc				
				Date fechaDoc = FechasUtil.getFechaStringToDate(cabBean.getFec_doc());				
				i.setFecDoc(fechaDoc);			
				i.setTipoId(cabBean.getTipo_id());
				i.setRuc(cabBean.getRuc());				
				i.setFteFin(cabBean.getFte_fin());				
				i.setMoneda(cabBean.getMoneda());
				if(validarNulo(cabBean.getT_cambio())){ 
					i.settCambio(Double.valueOf(cabBean.getT_cambio())); 	
				}else{
					i.settCambio(null); 		
				}
				i.setGloza(cabBean.getGloza()); 
				i.setEstado("");
				i.setUeEnvio(cabBean.getUe_envio());
				i.setUeEstado(cabBean.getUe_estado());
				i.setIntfCer(cabBean.getIntf_cer());
				i.setIntfSec(cabBean.getIntf_sec());
				i.setIntfCor(cabBean.getIntf_cor()); 
				i.setEstadoReg(cabBean.getEstado_reg()); 
				i.setDatoOri(cabBean.getDato_ori()); 	
				if(Constantes.FTE_FIN_CERT_CAB_13.equals(cabBean.getFte_fin()) ||
						Constantes.FTE_FIN_CERT_CAB_19.equals(cabBean.getFte_fin())){
					i.setTipoFinan(cabBean.getTipo_finan()); 	
				}else{
					i.setTipoFinan(""); 
				}		
				valorCab = true;
			}				
			 /**GRABANDO EN INTF_DET**/
			
			if(valorCab){	
				listaIdClasif = new ArrayList<String>();
				listaDet = new ArrayList<CertDet>();
				for(CertDetBean d: detLista){
					det = new CertDet();					
					if(!validarNulo(d.getSecuencial())){ 
						mensaje = Constantes.COD_SECUENCIAL_CERT_DET_NULO+"/"+
						          Constantes.SECUENCIAL_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getId_clasifi())){ 
						mensaje = Constantes.COD_ID_CLASIFI_CERT_DET_NULO+"/"+
						          Constantes.ID_CLASIFI_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv1())){ 
						mensaje = Constantes.COD_CLASIFNIV1_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV1_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv2())){ 
						mensaje = Constantes.COD_CLASIFNIV2_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV2_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv3())){ 
						mensaje = Constantes.COD_CLASIFNIV3_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV3_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv4())){ 
						mensaje = Constantes.COD_CLASIFNIV4_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV4_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv5())){ 
						mensaje = Constantes.COD_CLASIFNIV5_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV5_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv6())){ 
						mensaje = Constantes.COD_CLASIFNIV6_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV6_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getSec_func())){ 
						mensaje = Constantes.COD_SEC_FUNC_CERT_DET_NULO+"/"+
						          Constantes.SEC_FUNC_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NULO+"/"+
						          Constantes.MONTO_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NO_VALIDO+"/"+
						          Constantes.MONTO_CERT_DET_NO_VALIDO;
						break;
					}else if(validarNegativo(d.getMonto())){ 
					    mensaje = Constantes.COD_MONTO_CERT_DET_NO_NEGATIVO+"/"+
					              Constantes.MONTO_CERT_DET_NO_NEGATIVO;
					    break;
				    }else if(!validarNulo(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NULO+"/"+
						          Constantes.MONTO_MN_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_VALIDO+"/"+	
						          Constantes.MONTO_MN_CERT_DET_NO_VALIDO;	
						break;
					}else if(validarNegativo(d.getMonto_mn())){ 
					    mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_NEGATIVO+"/"+
					              Constantes.MONTO_MN_CERT_DET_NO_NEGATIVO;
					    break;
				    }else if(!verificarMontoMn(i.getMoneda(),d.getMonto(),d.getMonto_mn())){
				    	 mensaje = Constantes.COD_MONTO_MN_MONTO_NO_COINCIDE+"/"+
					              Constantes.MONTO_MN_MONTO_NO_COINCIDE;
					    break;
				    }else{								
						det.setSecuencial(d.getSecuencial()); 
						det.setIdClasifi(d.getId_clasifi());
						det.setClasifniv1(d.getClasifniv1());
						det.setClasifniv2(d.getClasifniv2());
						det.setClasifniv3(d.getClasifniv3());
						det.setClasifniv4(d.getClasifniv4());
						det.setClasifniv5(d.getClasifniv5());
						det.setClasifniv6(d.getClasifniv6()); 
						det.setSecFunc(d.getSec_func()); 						
						if(validarNulo(d.getMonto())){
							det.setMonto(Double.valueOf(d.getMonto())); 	
						}else{
							det.setMonto(null);	
						}
	                    if(validarNulo(d.getMonto_mn())){
	                    	det.setMontoMn(Double.valueOf(d.getMonto_mn()));  	
						}else{
							det.setMontoMn(null); 	
						}
	                    sumaMontoMn = sumaMontoMn +det.getMontoMn();
						valorDet = true;		
					}
					listaIdClasif.add(d.getId_clasifi());
					listaDet.add(det);
				}//fin del for			
			}
			
			/**varificando idclasificar en el detalle**/			
			if(valorDet && listaDet.size()>1){
				logger.info("Ingresando a verificar idClasificador: "); 
				Collections.sort(listaIdClasif);
				String idClasif = "";
				for(int j=0;j<listaIdClasif.size();j++){
					logger.info("verificar idClasificador: "+listaIdClasif.get(j)); 
					if(idClasif.equals(listaIdClasif.get(j))){ 
						valorDet = false;	
						mensaje = Constantes.COD_ID_CLASIFICADOR_CERT_DET_REPETIDO+"/"+
						          Constantes.ID_CLASIFICADOR_CERT_DET_REPETIDO; 
						break;
					}else{
						idClasif = listaIdClasif.get(j);						
					}					
				}
			}		
			if(valorCab && valorDet){
				Map<String, Object> paramts = new HashMap<String, Object>();				
				paramts.put("certCab", i);
				paramts.put("listaDet", listaDet);
				paramts.put("montoMnTotal", sumaMontoMn);
				//validando campos de las interfases
				String mensajeID = validacionCertifService.validarCompromisoAnualNuevo(paramts);
				String[] msnId = mensajeID.split("/");
				if(CODIGO_VERIFICACION_OK.equals(msnId[0])) {
			       certificacionDao.insertarCompromisoAnual(paramts);										
				}else{
					mensaje = mensajeID;					
				}			
			}			
		} catch (Exception e) {
			logger.info("Error al grabar datos de compromiso anual: "+e);		
			mensaje= CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i =null;			
			}
			if(listaDet!=null){				
				listaDet = null;				
			}			
			if(det!=null){			
				det= null;
			}
			if(listaIdClasif!=null){			
				listaIdClasif= null;
			}
			if(cabBean!=null){
				cabBean =null;
			}
			if(detLista!=null){
				detLista=null;
			}
		}
		return mensaje;
	}
	
	/*****INGRESOS DE DATOS COMPROMISO ANUAL AMPLIACION*********************/
	@SuppressWarnings("unchecked")
	private String  insertDatosCompromisoAnualAmpl(Map<String, Object> params) throws Exception {
		logger.info("Ingresando a grabar datos de Compromiso anual ampliacion"); 
		String mensaje = CODIGO_VERIFICACION_OK+"/"+"";
		boolean valorCab = false;
		boolean valorDet =false;		
		CertCab i = null;
		List<CertDet> listaDet =null;
		CertDet det = null;
		List<String> listaIdClasif=null;
		CertCabBean cabBean =null;
		List<CertDetBean> detLista=null;
		double sumaMonto = 0.0;
		double sumaMontoMn = 0.0;
		try {
			//Datos
			cabBean = (CertCabBean) params.get("cab");			
			detLista = (List<CertDetBean>) params.get("det");				
			
		   /**GRABANDO EN CERT_CAB**/
			if(!validarNulo(cabBean.getSecuencial())){ 
			     mensaje = Constantes.COD_SECUENCIAL_CERTCAB_NULO+"/"+
			    		   Constantes.SECUENCIAL_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getAno_eje())){ 
				 mensaje = Constantes.COD_ANIO_EJE_CERTCAB_NULO+"/"+
			               Constantes.ANIO_EJE_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getSec_ejec())){ 
				 mensaje = Constantes.COD_SEC_EJEC_CERTCAB_NULO+"/"+
						   Constantes.SEC_EJEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NULO+"/"+
						   Constantes.ES_COMP_CERTCAB_NULO;
			}else if(!Constantes.ES_COMP_ANUAL_SI.equals(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NO_VALIDO+"/"+
						   Constantes.ES_COMP_CERTCAB_NO_VALIDO;
			}else if(!validarNulo(cabBean.getCod_doc())){ 
				 mensaje = Constantes.COD_COD_DOC_CERTCAB_NULO+"/"+
				           Constantes.COD_DOC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getNum_doc())){ 
				mensaje = Constantes.COD_NUM_DOC_CERTCAB_NULO+"/"+
				          Constantes.NUM_DOC_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FEC_DOC_CERTCAB_NULO+"/"+
						  Constantes.FEC_DOC_CERTCAB_NULO;	
		    }else if(!FechasUtil.isFechaValida(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FECDOC_CERTCAB_NO_VALIDO+"/"+
						  Constantes.FECDOC_CERTCAB_NO_VALIDO;
		    }else if(!validarNulo(cabBean.getFte_fin())){ 
				mensaje = Constantes.COD_FTE_FIN_CERTCAB_NULO+"/"+
						  Constantes.FTE_FIN_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getMoneda())){ 
				mensaje = Constantes.COD_MONEDA_CERTCAB_NULO+"/"+
				          Constantes.MONEDA_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NULO+"/"+	
				          Constantes.T_CAMBIO_CERTCAB_NULO;
			}else if(!esDecimal(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_VALIDO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_VALIDO;
			}else if(validarNegativo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_NEGATIVO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_NEGATIVO;
			}else if(Double.valueOf(cabBean.getT_cambio())<=0.0){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_MAYOR_CERO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_MAYOR_CERO;
			}else if(!validarNulo(cabBean.getGloza())){ 
				mensaje = Constantes.COD_GLOZA_CERTCAB_NULO+"/"+	
				          Constantes.GLOZA_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getEstado())){ 
				mensaje = Constantes.COD_ESTADO_CERTCAB_NULO+"/"+	
				          Constantes.ESTADO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_envio())){ 
				mensaje = Constantes.COD_UE_ENVIO_CERTCAB_NULO+"/"+	
				          Constantes.UE_ENVIO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_estado())){ 
				mensaje = Constantes.COD_UE_ESTADO_CERTCAB_NULO+"/"+
				          Constantes.UE_ESTADO_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cer())){ 
				mensaje = Constantes.COD_INTF_CER_CERTCAB_NULO+"/"+	
				          Constantes.INTF_CER_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getIntf_sec())){ 
				mensaje = Constantes.COD_INTF_SEC_CERTCAB_NULO+"/"+
				          Constantes.INTF_SEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cor())){ 
				mensaje = Constantes.COD_INTF_COR_CERTCAB_NULO+"/"+
				          Constantes.INTF_COR_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEstado_reg())){ 
				mensaje = Constantes.COD_ESTADO_REG_CERTCAB_NULO+"/"+
				          Constantes.ESTADO_REG_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getDato_ori())){ 
				mensaje = Constantes.COD_DATO_ORI_CERTCAB_NULO+"/"+	
				          Constantes.DATO_ORI_CERTCAB_NULO;	
			}else if(!verificarTipoFinan(cabBean.getFte_fin(),cabBean.getTipo_finan())){
				mensaje = Constantes.COD_TIPO_FINAN_CERTCAB_NULO+"/"+	
				          Constantes.TIPO_FINAN_CERTCAB_NULO;	
			}else{
				i= new CertCab();
				i.setSecuencial(cabBean.getSecuencial());
				i.setAnoEje(cabBean.getAno_eje());
				i.setSecEjec(cabBean.getSec_ejec());
				i.setEsComp(cabBean.getEs_comp()); 
				i.setTipoOpe(""); 
				i.setCodDoc(cabBean.getCod_doc());				
				i.setNumDoc(cabBean.getNum_doc());
				//parseando la fechadoc				
				Date fechaDoc = FechasUtil.getFechaStringToDate(cabBean.getFec_doc());				
				i.setFecDoc(fechaDoc);			
				i.setTipoId("");
				i.setRuc("");				
				i.setFteFin(cabBean.getFte_fin());				
				i.setMoneda(cabBean.getMoneda());
				if(validarNulo(cabBean.getT_cambio())){ 
					i.settCambio(Double.valueOf(cabBean.getT_cambio())); 	
				}else{
					i.settCambio(null); 		
				}			
				i.setGloza(cabBean.getGloza()); 
				i.setEstado(cabBean.getEstado());
				i.setUeEnvio(cabBean.getUe_envio());
				i.setUeEstado(cabBean.getUe_estado());
				i.setIntfCer(cabBean.getIntf_cer());
				i.setIntfSec(cabBean.getIntf_sec());
				i.setIntfCor(cabBean.getIntf_cor()); 
				i.setEstadoReg(cabBean.getEstado_reg()); 
				i.setDatoOri(cabBean.getDato_ori()); 	
				if(Constantes.FTE_FIN_CERT_CAB_13.equals(cabBean.getFte_fin()) ||
						Constantes.FTE_FIN_CERT_CAB_19.equals(cabBean.getFte_fin())){
					i.setTipoFinan(cabBean.getTipo_finan()); 	
				}else{
					i.setTipoFinan(""); 
				}		
				valorCab = true;
			}					
			 /**GRABANDO EN INTF_DET**/
			
			if(valorCab){	
				listaIdClasif = new ArrayList<String>();
				listaDet = new ArrayList<CertDet>();
				for(CertDetBean d: detLista){
					det = new CertDet();					
					if(!validarNulo(d.getSecuencial())){ 
						mensaje = Constantes.COD_SECUENCIAL_CERT_DET_NULO+"/"+
						          Constantes.SECUENCIAL_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getId_clasifi())){ 
						mensaje = Constantes.COD_ID_CLASIFI_CERT_DET_NULO+"/"+
						          Constantes.ID_CLASIFI_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv1())){ 
						mensaje = Constantes.COD_CLASIFNIV1_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV1_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv2())){ 
						mensaje = Constantes.COD_CLASIFNIV2_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV2_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv3())){ 
						mensaje = Constantes.COD_CLASIFNIV3_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV3_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv4())){ 
						mensaje = Constantes.COD_CLASIFNIV4_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV4_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv5())){ 
						mensaje = Constantes.COD_CLASIFNIV5_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV5_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv6())){ 
						mensaje = Constantes.COD_CLASIFNIV6_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV6_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getSec_func())){ 
						mensaje = Constantes.COD_SEC_FUNC_CERT_DET_NULO+"/"+
						          Constantes.SEC_FUNC_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NULO+"/"+
						          Constantes.MONTO_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NO_VALIDO+"/"+
						          Constantes.MONTO_CERT_DET_NO_VALIDO;
						break;
					}else if(validarNegativo(d.getMonto())){ 
					    mensaje = Constantes.COD_MONTO_CERT_DET_NO_NEGATIVO+"/"+
					              Constantes.MONTO_CERT_DET_NO_NEGATIVO;
					    break;
				    }else if(!validarNulo(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NULO+"/"+
						          Constantes.MONTO_MN_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_VALIDO+"/"+	
						          Constantes.MONTO_MN_CERT_DET_NO_VALIDO;	
						break;
					}else if(validarNegativo(d.getMonto_mn())){ 
					    mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_NEGATIVO+"/"+
					              Constantes.MONTO_MN_CERT_DET_NO_NEGATIVO;
					    break;
				    }else if(!verificarMontoMn(i.getMoneda(),d.getMonto(),d.getMonto_mn())){
				    	 mensaje = Constantes.COD_MONTO_MN_MONTO_NO_COINCIDE+"/"+
					              Constantes.MONTO_MN_MONTO_NO_COINCIDE;
					    break;
				    }else{								
						det.setSecuencial(d.getSecuencial()); 
						det.setIdClasifi(d.getId_clasifi());
						det.setClasifniv1(d.getClasifniv1());
						det.setClasifniv2(d.getClasifniv2());
						det.setClasifniv3(d.getClasifniv3());
						det.setClasifniv4(d.getClasifniv4());
						det.setClasifniv5(d.getClasifniv5());
						det.setClasifniv6(d.getClasifniv6()); 
						det.setSecFunc(d.getSec_func()); 						
						if(validarNulo(d.getMonto())){
							det.setMonto(Double.valueOf(d.getMonto())); 	
						}else{
							det.setMonto(null);	
						}
	                    if(validarNulo(d.getMonto_mn())){
	                    	det.setMontoMn(Double.valueOf(d.getMonto_mn()));  	
						}else{
							det.setMontoMn(null); 	
						}
	                    sumaMonto = sumaMonto +det.getMonto();
	                    sumaMontoMn = sumaMontoMn +det.getMontoMn();
						valorDet = true;		
					}
					listaIdClasif.add(d.getId_clasifi());
					listaDet.add(det);
				}//fin del for			
			}
			
			/**varificando idclasificar en el detalle**/			
			if(valorDet && listaDet.size()>1){
				logger.info("Ingresando a verificar idClasificador: "); 
				Collections.sort(listaIdClasif);
				String idClasif = "";
				for(int j=0;j<listaIdClasif.size();j++){
					logger.info("verificar idClasificador: "+listaIdClasif.get(j)); 
					if(idClasif.equals(listaIdClasif.get(j))){ 
						valorDet = false;	
						mensaje = Constantes.COD_ID_CLASIFICADOR_CERT_DET_REPETIDO+"/"+
						          Constantes.ID_CLASIFICADOR_CERT_DET_REPETIDO; 
						break;
					}else{
						idClasif = listaIdClasif.get(j);						
					}					
				}
			}		
			if(valorCab && valorDet){
				Map<String, Object> paramts = new HashMap<String, Object>();				
				paramts.put("certCab", i);
				paramts.put("listaDet", listaDet);	
				paramts.put("montoTotal", sumaMonto);
				paramts.put("montoMnTotal", sumaMontoMn);
				//validando campos de las interfases
				String mensajeID = validacionCertifService.validarCompromisoAnualAmpl(paramts);
				String[] msnId = mensajeID.split("/");
				if(CODIGO_VERIFICACION_OK.equals(msnId[0])) {
			       certificacionDao.insertarCompromisoAnual(paramts);										
				}else{
					mensaje = mensajeID;					
				}			
			}			
		} catch (Exception e) {
			logger.info("Error al grabar datos de compromiso anual ampliacion: "+e);		
			mensaje= CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i =null;			
			}
			if(listaDet!=null){				
				listaDet = null;				
			}			
			if(det!=null){			
				det= null;
			}
			if(listaIdClasif!=null){			
				listaIdClasif= null;
			}
			if(cabBean!=null){
				cabBean =null;
			}
			if(detLista!=null){
				detLista=null;
			}
		}
		return mensaje;
	}
	
	/*****INGRESOS DE DATOS COMPROMISO ANUAL REBAJA*********************/	
	@SuppressWarnings("unchecked")
	private String  insertDatosCompromisoAnualRebaja(Map<String, Object> params) throws Exception {
		logger.info("Ingresando a grabar datos de compromiso anual Rebaja"); 
		String mensaje = CODIGO_VERIFICACION_OK+"/"+"";
		boolean valorCab = false;
		boolean valorDet =false;		
		CertCab i = null;
		List<CertDet> listaDet =null;
		CertDet det = null;
		List<String> listaIdClasif=null;
		CertCabBean cabBean =null;
		List<CertDetBean> detLista=null;
		double sumaMonto = 0.0;
		double sumaMontoMn = 0.0;		
		try {
			//Datos
			cabBean = (CertCabBean) params.get("cab");		
			detLista = (List<CertDetBean>) params.get("det");				
			
		   /**GRABANDO EN CERT_CAB**/
			if(!validarNulo(cabBean.getSecuencial())){ 
			     mensaje = Constantes.COD_SECUENCIAL_CERTCAB_NULO+"/"+
			    		   Constantes.SECUENCIAL_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getAno_eje())){ 
				 mensaje = Constantes.COD_ANIO_EJE_CERTCAB_NULO+"/"+
			               Constantes.ANIO_EJE_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getSec_ejec())){ 
				 mensaje = Constantes.COD_SEC_EJEC_CERTCAB_NULO+"/"+
						   Constantes.SEC_EJEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NULO+"/"+
						   Constantes.ES_COMP_CERTCAB_NULO;
			}else if(!Constantes.ES_COMP_ANUAL_SI.equals(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NO_VALIDO+"/"+
						   Constantes.ES_COMP_CERTCAB_NO_VALIDO;
			}else if(!validarNulo(cabBean.getCod_doc())){ 
				 mensaje = Constantes.COD_COD_DOC_CERTCAB_NULO+"/"+
				           Constantes.COD_DOC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getNum_doc())){ 
				mensaje = Constantes.COD_NUM_DOC_CERTCAB_NULO+"/"+
				          Constantes.NUM_DOC_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FEC_DOC_CERTCAB_NULO+"/"+
						  Constantes.FEC_DOC_CERTCAB_NULO;	
		    }else if(!FechasUtil.isFechaValida(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FECDOC_CERTCAB_NO_VALIDO+"/"+
						  Constantes.FECDOC_CERTCAB_NO_VALIDO;
		    }else if(!validarNulo(cabBean.getFte_fin())){ 
				mensaje = Constantes.COD_FTE_FIN_CERTCAB_NULO+"/"+
						  Constantes.FTE_FIN_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getMoneda())){ 
				mensaje = Constantes.COD_MONEDA_CERTCAB_NULO+"/"+
				          Constantes.MONEDA_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NULO+"/"+	
				          Constantes.T_CAMBIO_CERTCAB_NULO;
			}else if(!esDecimal(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_VALIDO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_VALIDO;
			}else if(validarNegativo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_NEGATIVO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_NEGATIVO;
			}else if(Double.valueOf(cabBean.getT_cambio())<=0.0){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_MAYOR_CERO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_MAYOR_CERO;
			}else if(!validarNulo(cabBean.getGloza())){ 
				mensaje = Constantes.COD_GLOZA_CERTCAB_NULO+"/"+	
				          Constantes.GLOZA_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getEstado())){ 
				mensaje = Constantes.COD_ESTADO_CERTCAB_NULO+"/"+	
				          Constantes.ESTADO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_envio())){ 
				mensaje = Constantes.COD_UE_ENVIO_CERTCAB_NULO+"/"+	
				          Constantes.UE_ENVIO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_estado())){ 
				mensaje = Constantes.COD_UE_ESTADO_CERTCAB_NULO+"/"+
				          Constantes.UE_ESTADO_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cer())){ 
				mensaje = Constantes.COD_INTF_CER_CERTCAB_NULO+"/"+	
				          Constantes.INTF_CER_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getIntf_sec())){ 
				mensaje = Constantes.COD_INTF_SEC_CERTCAB_NULO+"/"+
				          Constantes.INTF_SEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cor())){ 
				mensaje = Constantes.COD_INTF_COR_CERTCAB_NULO+"/"+
				          Constantes.INTF_COR_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEstado_reg())){ 
				mensaje = Constantes.COD_ESTADO_REG_CERTCAB_NULO+"/"+
				          Constantes.ESTADO_REG_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getDato_ori())){ 
				mensaje = Constantes.COD_DATO_ORI_CERTCAB_NULO+"/"+	
				          Constantes.DATO_ORI_CERTCAB_NULO;	
			}else if(!verificarTipoFinan(cabBean.getFte_fin(),cabBean.getTipo_finan())){
				mensaje = Constantes.COD_TIPO_FINAN_CERTCAB_NULO+"/"+	
				          Constantes.TIPO_FINAN_CERTCAB_NULO;	
			}else{
				i = new CertCab();
				i.setSecuencial(cabBean.getSecuencial());
				i.setAnoEje(cabBean.getAno_eje());
				i.setSecEjec(cabBean.getSec_ejec());
				i.setEsComp(cabBean.getEs_comp()); 
				i.setTipoOpe(""); 
				i.setCodDoc(cabBean.getCod_doc());				
				i.setNumDoc(cabBean.getNum_doc());
				//parseando la fechadoc				
				Date fechaDoc = FechasUtil.getFechaStringToDate(cabBean.getFec_doc());				
				i.setFecDoc(fechaDoc);			
				i.setTipoId("");
				i.setRuc("");				
				i.setFteFin(cabBean.getFte_fin());				
				i.setMoneda(cabBean.getMoneda());
				if(validarNulo(cabBean.getT_cambio())){ 
					i.settCambio(Double.valueOf(cabBean.getT_cambio())); 	
				}else{
					i.settCambio(null); 		
				}			
				i.setGloza(cabBean.getGloza()); 
				i.setEstado(cabBean.getEstado());
				i.setUeEnvio(cabBean.getUe_envio());
				i.setUeEstado(cabBean.getUe_estado());
				i.setIntfCer(cabBean.getIntf_cer());
				i.setIntfSec(cabBean.getIntf_sec());
				i.setIntfCor(cabBean.getIntf_cor()); 
				i.setEstadoReg(cabBean.getEstado_reg()); 
				i.setDatoOri(cabBean.getDato_ori()); 	
				if(Constantes.FTE_FIN_CERT_CAB_13.equals(cabBean.getFte_fin()) ||
						Constantes.FTE_FIN_CERT_CAB_19.equals(cabBean.getFte_fin())){
					i.setTipoFinan(cabBean.getTipo_finan()); 	
				}else{
					i.setTipoFinan(""); 
				} 			
				valorCab = true;
			}			
			 /**GRABANDO EN INTF_DET**/
			
			if(valorCab){	
				listaIdClasif = new ArrayList<String>(); 
				listaDet = new ArrayList<CertDet>();
				for(CertDetBean d: detLista){
					det = new CertDet();					
					if(!validarNulo(d.getSecuencial())){ 
						mensaje = Constantes.COD_SECUENCIAL_CERT_DET_NULO+"/"+
						          Constantes.SECUENCIAL_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getId_clasifi())){ 
						mensaje = Constantes.COD_ID_CLASIFI_CERT_DET_NULO+"/"+
						          Constantes.ID_CLASIFI_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv1())){ 
						mensaje = Constantes.COD_CLASIFNIV1_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV1_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv2())){ 
						mensaje = Constantes.COD_CLASIFNIV2_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV2_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv3())){ 
						mensaje = Constantes.COD_CLASIFNIV3_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV3_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv4())){ 
						mensaje = Constantes.COD_CLASIFNIV4_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV4_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv5())){ 
						mensaje = Constantes.COD_CLASIFNIV5_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV5_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv6())){ 
						mensaje = Constantes.COD_CLASIFNIV6_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV6_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getSec_func())){ 
						mensaje = Constantes.COD_SEC_FUNC_CERT_DET_NULO+"/"+
						          Constantes.SEC_FUNC_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NULO+"/"+
						          Constantes.MONTO_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NO_VALIDO+"/"+
						          Constantes.MONTO_CERT_DET_NO_VALIDO;
						break;
					}else if(!validarNegativo(d.getMonto())){ 
					    mensaje = Constantes.COD_MONTO_CERT_DET_NO_POSITIVO+"/"+
					              Constantes.MONTO_CERT_DET_NO_POSITIVO;
					    break;
				    }else if(!validarNulo(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NULO+"/"+
						          Constantes.MONTO_MN_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_VALIDO+"/"+	
						          Constantes.MONTO_MN_CERT_DET_NO_VALIDO;	
						break;
					}else if(!validarNegativo(d.getMonto_mn())){ 
					    mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_POSITIVO+"/"+
					              Constantes.MONTO_MN_CERT_DET_NO_POSITIVO;
					    break;
				    }else if(!verificarMontoMn(i.getMoneda(),d.getMonto(),d.getMonto_mn())){
				    	 mensaje = Constantes.COD_MONTO_MN_MONTO_NO_COINCIDE+"/"+
					              Constantes.MONTO_MN_MONTO_NO_COINCIDE;
					    break;
				    }else{								
						det.setSecuencial(d.getSecuencial()); 
						det.setIdClasifi(d.getId_clasifi());
						det.setClasifniv1(d.getClasifniv1());
						det.setClasifniv2(d.getClasifniv2());
						det.setClasifniv3(d.getClasifniv3());
						det.setClasifniv4(d.getClasifniv4());
						det.setClasifniv5(d.getClasifniv5());
						det.setClasifniv6(d.getClasifniv6()); 
						det.setSecFunc(d.getSec_func()); 						
						if(validarNulo(d.getMonto())){
							det.setMonto(Double.valueOf(d.getMonto())); 	
						}else{
							det.setMonto(null);	
						}
	                    if(validarNulo(d.getMonto_mn())){
	                    	det.setMontoMn(Double.valueOf(d.getMonto_mn()));  	
						}else{
							det.setMontoMn(null); 	
						}
	                    sumaMonto = sumaMonto +det.getMonto();
	                    sumaMontoMn = sumaMontoMn +det.getMontoMn();
						valorDet = true;		
					}
					listaIdClasif.add(d.getId_clasifi());
					listaDet.add(det);
				}//fin del for			
			}
			
			/**varificando idclasificar en el detalle**/			
			if(valorDet && listaDet.size()>1){
				logger.info("Ingresando a verificar idClasificador: "); 
				Collections.sort(listaIdClasif);
				String idClasif = "";
				for(int j=0;j<listaIdClasif.size();j++){
					logger.info("verificar idClasificador: "+listaIdClasif.get(j)); 
					if(idClasif.equals(listaIdClasif.get(j))){ 
						valorDet = false;	
						mensaje = Constantes.COD_ID_CLASIFICADOR_CERT_DET_REPETIDO+"/"+
						          Constantes.ID_CLASIFICADOR_CERT_DET_REPETIDO; 
						break;
					}else{
						idClasif = listaIdClasif.get(j);						
					}					
				}
			}		
			if(valorCab && valorDet){
				Map<String, Object> paramts = new HashMap<String, Object>();				
				paramts.put("certCab", i);
				paramts.put("listaDet", listaDet);	
				paramts.put("montoTotal", sumaMonto);
				paramts.put("montoMnTotal", sumaMontoMn);
				//validando campos de las interfases
				String mensajeID = validacionCertifService.validarCompromisoAnualRebaja(paramts);
				String[] msnId = mensajeID.split("/");
				if(CODIGO_VERIFICACION_OK.equals(msnId[0])) {
					certificacionDao.insertarCompromisoAnual(paramts);											
				}else{
					mensaje = mensajeID;					
				}			
			}			
		} catch (Exception e) {
			logger.info("Error al grabar datos de compromiso anual rebaja: "+e);		
			mensaje= CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i =null;			
			}
			if(listaDet!=null){				
				listaDet = null;				
			}			
			if(det!=null){			
				det= null;
			}
			if(listaIdClasif!=null){			
				listaIdClasif= null;
			}
			if(cabBean!=null){
				cabBean =null;
			}
			if(detLista!=null){
				detLista=null;
			}
		}
		return mensaje;
	}
	
	/*****INGRESOS DE DATOS COMPROMISO ANUAL ANULACION*********************/
	@SuppressWarnings("unchecked")
	private String  insertDatosCompromisoAnualnAnulacion(Map<String, Object> params) throws Exception {
		logger.info("Ingresando a grabar datos de Compromiso anual Anulacion"); 
		String mensaje = CODIGO_VERIFICACION_OK+"/"+"";
		boolean valorCab = false;
		boolean valorDet =false;		
		CertCab i = null;
		List<CertDet> listaDet =null;
		CertDet det = null;
		List<String> listaIdClasif=null;
		CertCabBean cabBean =null;
		List<CertDetBean> detLista=null;
		double sumaMonto = 0.0;
		double sumaMontoMn = 0.0;		
		try {
			//Datos
			cabBean = (CertCabBean) params.get("cab");   		
			detLista = (List<CertDetBean>) params.get("det");				
			
		   /**GRABANDO EN CERT_CAB**/
			if(!validarNulo(cabBean.getSecuencial())){ 
			     mensaje = Constantes.COD_SECUENCIAL_CERTCAB_NULO+"/"+
			    		   Constantes.SECUENCIAL_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getAno_eje())){ 
				 mensaje = Constantes.COD_ANIO_EJE_CERTCAB_NULO+"/"+
			               Constantes.ANIO_EJE_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getSec_ejec())){ 
				 mensaje = Constantes.COD_SEC_EJEC_CERTCAB_NULO+"/"+
						   Constantes.SEC_EJEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NULO+"/"+
						   Constantes.ES_COMP_CERTCAB_NULO;
			}else if(!Constantes.ES_COMP_ANUAL_SI.equals(cabBean.getEs_comp())){ 
				 mensaje = Constantes.COD_ES_COMP_CERTCAB_NO_VALIDO+"/"+
						   Constantes.ES_COMP_CERTCAB_NO_VALIDO;
			}else if(!validarNulo(cabBean.getCod_doc())){ 
				 mensaje = Constantes.COD_COD_DOC_CERTCAB_NULO+"/"+
				           Constantes.COD_DOC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getNum_doc())){ 
				mensaje = Constantes.COD_NUM_DOC_CERTCAB_NULO+"/"+
				          Constantes.NUM_DOC_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FEC_DOC_CERTCAB_NULO+"/"+
						  Constantes.FEC_DOC_CERTCAB_NULO;	
		    }else if(!FechasUtil.isFechaValida(cabBean.getFec_doc())){ 
				mensaje = Constantes.COD_FECDOC_CERTCAB_NO_VALIDO+"/"+
						  Constantes.FECDOC_CERTCAB_NO_VALIDO;
		    }else if(!validarNulo(cabBean.getFte_fin())){ 
				mensaje = Constantes.COD_FTE_FIN_CERTCAB_NULO+"/"+
						  Constantes.FTE_FIN_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getMoneda())){ 
				mensaje = Constantes.COD_MONEDA_CERTCAB_NULO+"/"+
				          Constantes.MONEDA_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NULO+"/"+	
				          Constantes.T_CAMBIO_CERTCAB_NULO;
			}else if(!esDecimal(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_VALIDO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_VALIDO;
			}else if(validarNegativo(cabBean.getT_cambio())){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_NO_NEGATIVO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_NO_NEGATIVO;
			}else if(Double.valueOf(cabBean.getT_cambio())<=0.0){ 
				mensaje = Constantes.COD_T_CAMBIO_CERTCAB_MAYOR_CERO+"/"+
				          Constantes.T_CAMBIO_CERTCAB_MAYOR_CERO;
			}else if(!validarNulo(cabBean.getGloza())){ 
				mensaje = Constantes.COD_GLOZA_CERTCAB_NULO+"/"+	
				          Constantes.GLOZA_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getEstado())){ 
				mensaje = Constantes.COD_ESTADO_CERTCAB_NULO+"/"+	
				          Constantes.ESTADO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_envio())){ 
				mensaje = Constantes.COD_UE_ENVIO_CERTCAB_NULO+"/"+	
				          Constantes.UE_ENVIO_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getUe_estado())){ 
				mensaje = Constantes.COD_UE_ESTADO_CERTCAB_NULO+"/"+
				          Constantes.UE_ESTADO_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cer())){ 
				mensaje = Constantes.COD_INTF_CER_CERTCAB_NULO+"/"+	
				          Constantes.INTF_CER_CERTCAB_NULO;	
			}else if(!validarNulo(cabBean.getIntf_sec())){ 
				mensaje = Constantes.COD_INTF_SEC_CERTCAB_NULO+"/"+
				          Constantes.INTF_SEC_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getIntf_cor())){ 
				mensaje = Constantes.COD_INTF_COR_CERTCAB_NULO+"/"+
				          Constantes.INTF_COR_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getEstado_reg())){ 
				mensaje = Constantes.COD_ESTADO_REG_CERTCAB_NULO+"/"+
				          Constantes.ESTADO_REG_CERTCAB_NULO;
			}else if(!validarNulo(cabBean.getDato_ori())){ 
				mensaje = Constantes.COD_DATO_ORI_CERTCAB_NULO+"/"+	
				          Constantes.DATO_ORI_CERTCAB_NULO;	
			}else if(!verificarTipoFinan(cabBean.getFte_fin(),cabBean.getTipo_finan())){
				mensaje = Constantes.COD_TIPO_FINAN_CERTCAB_NULO+"/"+	
				          Constantes.TIPO_FINAN_CERTCAB_NULO;	
			}else{
				i = new CertCab();
				i.setSecuencial(cabBean.getSecuencial());
				i.setAnoEje(cabBean.getAno_eje());
				i.setSecEjec(cabBean.getSec_ejec());
				i.setEsComp(cabBean.getEs_comp()); 
				i.setTipoOpe(""); 
				i.setCodDoc(cabBean.getCod_doc());				
				i.setNumDoc(cabBean.getNum_doc());
				//parseando la fechadoc				
				Date fechaDoc = FechasUtil.getFechaStringToDate(cabBean.getFec_doc());				
				i.setFecDoc(fechaDoc);			
				i.setTipoId("");
				i.setRuc("");				
				i.setFteFin(cabBean.getFte_fin());				
				i.setMoneda(cabBean.getMoneda());
				if(validarNulo(cabBean.getT_cambio())){ 
					i.settCambio(Double.valueOf(cabBean.getT_cambio())); 	
				}else{
					i.settCambio(null); 		
				}			
				i.setGloza(cabBean.getGloza()); 
				i.setEstado(cabBean.getEstado());
				i.setUeEnvio(cabBean.getUe_envio());
				i.setUeEstado(cabBean.getUe_estado());
				i.setIntfCer(cabBean.getIntf_cer());
				i.setIntfSec(cabBean.getIntf_sec());
				i.setIntfCor(cabBean.getIntf_cor()); 
				i.setEstadoReg(cabBean.getEstado_reg()); 
				i.setDatoOri(cabBean.getDato_ori()); 	
				if(Constantes.FTE_FIN_CERT_CAB_13.equals(cabBean.getFte_fin()) ||
						Constantes.FTE_FIN_CERT_CAB_19.equals(cabBean.getFte_fin())){
					i.setTipoFinan(cabBean.getTipo_finan()); 	
				}else{
					i.setTipoFinan(""); 
				}		
				valorCab = true;
			}			
			 /**GRABANDO EN INTF_DET**/
			
			if(valorCab){	
				listaIdClasif = new ArrayList<String>();
				listaDet = new ArrayList<CertDet>();
				for(CertDetBean d: detLista){
					det = new CertDet();					
					if(!validarNulo(d.getSecuencial())){ 
						mensaje = Constantes.COD_SECUENCIAL_CERT_DET_NULO+"/"+
						          Constantes.SECUENCIAL_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getId_clasifi())){ 
						mensaje = Constantes.COD_ID_CLASIFI_CERT_DET_NULO+"/"+
						          Constantes.ID_CLASIFI_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv1())){ 
						mensaje = Constantes.COD_CLASIFNIV1_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV1_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv2())){ 
						mensaje = Constantes.COD_CLASIFNIV2_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV2_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv3())){ 
						mensaje = Constantes.COD_CLASIFNIV3_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV3_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv4())){ 
						mensaje = Constantes.COD_CLASIFNIV4_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV4_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv5())){ 
						mensaje = Constantes.COD_CLASIFNIV5_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV5_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getClasifniv6())){ 
						mensaje = Constantes.COD_CLASIFNIV6_CERT_DET_NULO+"/"+
						          Constantes.CLASIFNIV6_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getSec_func())){ 
						mensaje = Constantes.COD_SEC_FUNC_CERT_DET_NULO+"/"+
						          Constantes.SEC_FUNC_CERT_DET_NULO;
						break;
					}else if(!validarNulo(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NULO+"/"+
						          Constantes.MONTO_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto())){ 
						mensaje = Constantes.COD_MONTO_CERT_DET_NO_VALIDO+"/"+
						          Constantes.MONTO_CERT_DET_NO_VALIDO;
						break;
					}else if(!validarNegativo(d.getMonto())){ 
					    mensaje = Constantes.COD_MONTO_CERT_DET_NO_POSITIVO+"/"+
					              Constantes.MONTO_CERT_DET_NO_POSITIVO;
					    break;
				    }else if(!validarNulo(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NULO+"/"+
						          Constantes.MONTO_MN_CERT_DET_NULO;
						break;
					}else if(!esDecimal(d.getMonto_mn())){ 
						mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_VALIDO+"/"+	
						          Constantes.MONTO_MN_CERT_DET_NO_VALIDO;	
						break;
					}else if(!validarNegativo(d.getMonto_mn())){ 
					    mensaje = Constantes.COD_MONTO_MN_CERT_DET_NO_POSITIVO+"/"+
					              Constantes.MONTO_MN_CERT_DET_NO_POSITIVO;
					    break;
				    }else if(!verificarMontoMn(i.getMoneda(),d.getMonto(),d.getMonto_mn())){
				    	 mensaje = Constantes.COD_MONTO_MN_MONTO_NO_COINCIDE+"/"+
					              Constantes.MONTO_MN_MONTO_NO_COINCIDE;
					    break;
				    }else{								
						det.setSecuencial(d.getSecuencial()); 
						det.setIdClasifi(d.getId_clasifi());
						det.setClasifniv1(d.getClasifniv1());
						det.setClasifniv2(d.getClasifniv2());
						det.setClasifniv3(d.getClasifniv3());
						det.setClasifniv4(d.getClasifniv4());
						det.setClasifniv5(d.getClasifniv5());
						det.setClasifniv6(d.getClasifniv6()); 
						det.setSecFunc(d.getSec_func()); 						
						if(validarNulo(d.getMonto())){
							det.setMonto(Double.valueOf(d.getMonto())); 	
						}else{
							det.setMonto(null);	
						}
	                    if(validarNulo(d.getMonto_mn())){
	                    	det.setMontoMn(Double.valueOf(d.getMonto_mn()));  	
						}else{
							det.setMontoMn(null); 	
						}
	                    sumaMonto = sumaMonto +det.getMonto();
	                    sumaMontoMn = sumaMontoMn +det.getMontoMn();
						valorDet = true;		
					}
					listaIdClasif.add(d.getId_clasifi());
					listaDet.add(det);
				}//fin del for			
			}
			
			/**varificando idclasificar en el detalle**/			
			if(valorDet && listaDet.size()>1){
				logger.info("Ingresando a verificar idClasificador: "); 
				Collections.sort(listaIdClasif);
				String idClasif = "";
				for(int j=0;j<listaIdClasif.size();j++){
					logger.info("verificar idClasificador: "+listaIdClasif.get(j)); 
					if(idClasif.equals(listaIdClasif.get(j))){ 
						valorDet = false;	
						mensaje = Constantes.COD_ID_CLASIFICADOR_CERT_DET_REPETIDO+"/"+
						          Constantes.ID_CLASIFICADOR_CERT_DET_REPETIDO; 
						break;
					}else{
						idClasif = listaIdClasif.get(j);						
					}					
				}
			}		
			if(valorCab && valorDet){
				Map<String, Object> paramts = new HashMap<String, Object>();				
				paramts.put("certCab", i);
				paramts.put("listaDet", listaDet);	
				paramts.put("montoTotal", sumaMonto);
				paramts.put("montoMnTotal", sumaMontoMn);
				//validando campos de las interfases
				String mensajeID = validacionCertifService.validarCompromisoAnualAnulacion(paramts);
				String[] msnId = mensajeID.split("/");
				if(CODIGO_VERIFICACION_OK.equals(msnId[0])) {
					certificacionDao.insertarCompromisoAnual(paramts);											
				}else{
					mensaje = mensajeID;					
				}			
			}			
		} catch (Exception e) {
			logger.info("Error al grabar datos de compromiso anual anulacion: "+e);		
			mensaje= CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i =null;			
			}
			if(listaDet!=null){				
				listaDet = null;				
			}			
			if(det!=null){			
				det= null;
			}
			if(listaIdClasif!=null){			
				listaIdClasif= null;
			}
			if(cabBean!=null){
				cabBean =null;
			}
			if(detLista!=null){
				detLista=null;
			}
		}
		return mensaje;
	}
	
	
	private boolean validarNulo(String cadena){		
		  boolean valor = true;
		  if(StringUtils.isBlank(cadena)){
			valor =false; 		
		  }
		  return valor;	  
		}

	private boolean validarNegativo(String cadena){
		boolean valor = true;
		if(StringUtils.isNoneBlank(cadena)){ 
			double monto = Double.valueOf(cadena);
			if(monto>=0.0){
				logger.info("Valor positivo:");
				valor =false; 		
			}else{
				logger.info("Valor negativo:");
				valor = true;
			}   		
		}
		return valor;	 
	}

	public boolean esDecimal(String cadena)
	{
		try
		{
			Double.parseDouble(cadena);
			logger.info("Valor si es deciaml"); 
			return true;
		}
		catch(NumberFormatException nfe)
		{
			logger.info("Valor no es deciaml"); 
			return false;
		}
	}
	
	public boolean verificarTipoFinan(String fuenteFinan,String tipoFinan){
		if(Constantes.FTE_FIN_CERT_CAB_13.equals(fuenteFinan) ||
				Constantes.FTE_FIN_CERT_CAB_19.equals(fuenteFinan)){
			if(!validarNulo(tipoFinan)){
				return false;
			}else{
				return true;
			}
		}else{
			return true;
		}
	}
	
	public boolean verificarMontoMn(String moneda,String monto,String montoMn){
		 if(Constantes.MONEDA_NUEVO_SOL.equals(moneda)){ 
	    	if(!monto.equals(montoMn)){ 
	    		return false;
	    	}else{
	    		return true;
	    	}
	    }else{
	    	return true;
	    }
	}
	
	
	

}
